前のコマンドが失敗した後にのみbashでコマンドを実行するには? [コピー]

前のコマンドが失敗した後にのみbashでコマンドを実行するには? [コピー]

&&演算子を使用して、前のコマンドが完了した後にコマンドを実行します。

update-system-configuration && restart-service

しかし、以前のコマンドが失敗した場合にのみコマンドを実行するには?

たとえば、システム構成の更新が失敗した場合は、システム管理者に電子メールを送信する必要がありますか?

編集:さあ、これは制御演算子の重複質問ではありません。これは、この質問を具体的に検索する人に役立ちます。制御オペレータの回答もこの質問に対する回答であることを知っていますが、失敗したコマンドの処理方法を具体的に検索する人はそこに直接到達できません。そうでなければ、尋ねる前にそこに到着したでしょう。この質問質問。

答え1

&&後続のコマンドは、前のコマンドが成功した場合にのみ実行されます。 ||その逆は本当です。

update-system-configuration || echo "Update failed" | mail -s "Help Me" admin@host

文書

からman bash

ANDおよびORリストは、&&と||で区切られたいくつかのパイプの1つのシーケンスです。オペレータを個別に制御します。 AND リストと OR リストは左の関連付けで実行されます。 ANDリストの形式は次のとおりです。

command1 && command2

command2 は command1 が終了状態 0 を返した場合にのみ実行されます。

OR リストの形式は次のとおりです。

command1 || command2

command2 は、command1 がゼロ以外の終了状態を返す場合にのみ実行されます。 ANDおよびORリストの戻り状態は、リストで最後に実行されたコマンドの終了状態です。

答え2

「成功」すれば を返すという意味0なので簡単にテストしてみてください。

if ! <command>; then
    <ran if unsuccessful>
fi

その理由は、標準によってプログラムは問題が発生するとゼロ以外の値を返し、成功するとゼロを返すようになっているからです。

または、戻り変数をテストできます$?

<command>
if [ $? -ne 0 ]; then
    <ran if unsuccessful>
fi

$?最後のコマンドの戻りコードを保存します。

今これはif通常シェル組み込みです。したがって、使用するシェルに応じて、シェルのマニュアルページを確認する必要があります。

関連情報