この呼び出しの結果を取得しようとしています
TMP=$(find /mydir/ -type f -mmin +1440 | xargs rm -f)
M=$?
残念ながら、/mydir/
が存在しない場合、問題がなかったかのように、 の結果$?
は依然として ' 0
' です。何も返さない場合0
は、 ' ' 以外のものを取得したいと思います。find
どうすればいいですか?
リンクによる :
bash バージョン 3 では、パイプラインの終了コードの動作を変更し、ゼロ以外の終了コードを返す最後のプログラムの終了コードとしてパイプラインの終了コードを報告するオプションが導入されました。テスト プログラムに続くプログラムがゼロ以外の終了コードを報告しない限り、パイプラインはその終了コードがテスト プログラムの終了コードであると報告します。このオプションを有効にするには、次を実行します。
set -o pipefail
それで
TMP=$(find /mydir/ -type f -mmin +1440 | xargs rm -f)
M=$?
異なる動作をし、エラーを認識します。StackOverflow
Bestに関する以前の投稿も参照してください。
ジャック。
bash
のpipefail
オプションを有効にすることができます。ドキュメント (からhelp set
):
pipefail the return value of a pipeline is the status of
the last command to exit with a non-zero status,
or zero if no command exited with a non-zero status
したがって、次のように書くことができます。
set -o pipefail
TMP=$(find /mydir/ -type f -mmin +1440 | xargs --no-run-if-empty rm -f)
M=$?
set +o pipefail
find
また、なぜ内部でコマンドを実行しているの$( ... )
ですか? エラーを出力したくない場合は、STDERR を にリダイレクトします。また、またはフラグを/dev/null
に使用して、パイプから入力を受信しない場合にコマンドを実行しないようにすることをお勧めします。-r
--no-run-if-empty
xargs
ディレクトリが bash に存在するかどうかを確認します。
if [ ! -d "mydir" ]; then
exit 1 #or whatever you want, control will stop here
fi
TMP=$(find /mydir/ -type f -mmin +1440 | xargs rm -f)
...