2

2つの引数を渡しながら、指定されたディレクトリで実行可能ファイルを実行する小さなシェルスクリプトがあります。

#!/bin/sh

cd '/foo'
for s in bar/*;
do [ -x $s ] && $s "$1" "$2" || : ;
done

ビットは|| :何か目的を果たしていますか?実行可能ファイルを非同期で開始したかったので、をに変更し;ましたが&、単に実行するべきではない理由があります。

#!/bin/sh

cd '/foo'
for s in bar/*;
do [ -x $s ] && $s "$1" "$2" &
done
4

1 に答える 1

6

|| :(これはしばしば綴られます|| true)は、コマンドが成功するかどうかを気にしないことを意味します。正常なリターンステータス($?)を強制します。

-eエラーが見過ごされないように、シェルのオプションでシェルスクリプトを実行することをお勧めします。このオプションは、シバンライン(#!/bin/sh -e)またはスクリプト自体(set -e)のいずれかでアクティブ化できます。スクリプトの実行を中止するエラーが発生します。

この場合、はで実行され-e|| :いないため、コマンドが失敗した場合でもシェルは結果コードを無視するため、は違いはありません。さらに、この場合はバックグラウンドでコマンドを実行しているため、リターンコードを確認しても意味がありません。

一般に、|| true実行していない場合でも含めることは、次-eの2つの理由で有効です。

  • -eの下で実行するように変更された場合に備えて、互換性を持たせるため-e
  • シェルスクリプトを読んでいる人に、このコマンドが失敗する可能性があること、およびそのような失敗が明示的に問題ないことを認識しているドキュメントとして機能すること。
于 2012-11-24T06:00:00.133 に答える