私は次のステートメントが何を意味するのか、それが正しいことを理解したいのです。
test -x /usr/bin/find || exit 0
Command 1
Command 2
Command 3
の出力はtest -x /usr/bin/find
常に0です。これは終了0命令が実行されることを意味し、これは命令1、2、3が絶対に実行されないことを意味する。私はここにいますか?
答え1
test -x /usr/bin/find
(または[ -x /usr/bin/find ]
)何も出力しません。テストは次のとおりです。本物/usr/bin/find
既存の実行ファイルの場合間違ったパス名が存在しないか、実行可能でない場合。
正常に終了するとtest
(終了ステータスが0、つまり「エラーなし」を意味します)、シェルは残りのコマンドを実行します。シャットダウンに失敗すると(ゼロ以外のシャットダウン状態、「一部エラー」を示す)、exit 0
現在のシェルはシャットダウンされ、残りのコマンドは実行されません。
間違いなく見つからない場合は、使用またはexit 1
交換することをお勧めexit
します。終了状態(ゼロではない)にマスクを使用し、このスクリプトの呼び出し元が指定された場所で失敗した照会の通知を受け取らないようにします。exit 0
find
/usr/bin
exit 0
test
find
シェルからブール値でテストすると、終了ステータス0が「true」と評価されるという事実に関連します。
使用に関連しており、||
一般&&
的に言えば:
答え2
いいえ、彼らはいつも処刑されました。 (すべてのPOSIXシェルで同様にman bash
機能します):
An OR list has the form
command1 || command2
command2 is executed if, and only if, command1 returns a non-zero exit
status.
test -x /usr/bin/find
0が返されるので、command2(exit 0
この場合)は実行されず、スクリプトは引き続き実行されます。