閉鎖 。この質問は意見に基づいています。現在、回答を受け付けていません。
この質問を改善する
この質問を改善したいですか? この投稿を編集して、事実と引用で回答できるように質問を更新してください。
7年前に閉鎖されました。
この質問を改善する
次の問題があるとします。
スクリプトがパイプ内で実行されるかどうかに応じて、-print0
を追加する必要があります find
へのパラメータ 。
これを行うには、少なくとも2つの方法が考えられます。
[[ -p '/dev/stdin' ]] && local null_terminated='-print0'
find -mindepth 1 -maxdepth 1 ! ( "${args[@]}" ) "$null_terminated"
または
if [[ -p '/dev/stdin' ]]; then
find -mindepth 1 -maxdepth 1 ! ( "${args[@]}" ) -print0
else
find -mindepth 1 -maxdepth 1 ! ( "${args[@]}" )
fi
これを行うためのより良い方法はありますか?質問はbash
です 、ただし、他のシェルまたはポータブル/標準のsh
のソリューション ソリューションも歓迎されます。
承認された回答:
最初のものは、$null_terminated
のようには機能しません 空または未設定の場合、find
その空の余分な引数について文句を言うでしょう。
find -mindepth 1 -maxdepth 1 ! ( "${args[@]}" ) $null_terminated
動作しますが、$null_terminated
の場合のみ ワイルドカード文字またはIFSの文字は含まれていません。
やる:
if [[ -p '/dev/stdin' ]]; then
extra_args=(-print0)
else
extra_args=()
fi
find -mindepth 1 -maxdepth 1 ! ( "${args[@]}" ) "${extra_args[@]}"
問題はありません。
Bourne / POSIXly、次のことができます:
set--find。 ! -名前 。 -プルーン ! ("[メール保護]")[-p / dev / stdin] &&set-"[メール保護]"-execprintf'%s
Linux