コマンドはpatch -R -p0 -s -f --dry-run < abc.patch
終了コード 1 で失敗し、パッチ コマンドのエラー メッセージを出力しますが、if 条件で否定で使用すると、パススルー (パスの印刷など) を行う場合、次のコードは次のようになります。
if ! patch -R -p0 -s -f --dry-run < abc.patch; then
echo "Pass"
fi
私は何を試みたか。 dev / null文字列をリダイレクトしましたが、結果は変更されませんでした。
ここで何が間違っているかを理解するのに役立ちます。
ベストアンサー1
patch
forステートメントの終了ステータスを否定したため、if
そのステートメントは「失敗した場合は文字列を出力します」if
と読み取ることができます。patch
Pass
このif
ステートメントは、指定されたコマンドが成功したかどうかをテストします(本物)または失敗(間違った)。必要に応じてこれを覚えて、この答えの残りの部分を忘れてください。
コマンドが失敗した場合、終了ステータスはゼロではないため、失敗の原因を詳しく調べることができます。ユーティリティが返された実際の値の意味を指定する場合(たとえば、マニュアルの最後のセクションを参照curl
)rsync
、スクリプトはエラーを適切に処理するように選択できます。
コマンドの終了ステータスが 0 の場合、ユーティリティは正常に完了したことをシェルに通知します。
終了状態は、「ブール」または「真または偽」ではなく「エラーコード」に近い。 true / falseブールテストは、if
ユーティリティにエラー状態があるかどうかを確認するために終了ステータスをテストするステートメントによって内部的に実行されます。そうでない場合(終了ステータスが0)、テストは次のようになります。本物つまり、ユーティリティは失敗しませんでした。