web-dev-qa-db-ja.com

Bash:コマンドが失敗した場合にコマンドを実行する

私はこのようなことをしたいです:

if cmd1 && cmd2
echo success
else
echo epic fail
fi

どうすればよいですか?

51
michelemarcon

これらはあなたが必要とすることをするはずです:

cmd1 && cmd2 && echo success || echo epic fail

または

if cmd1 && cmd2; then
    echo success
else
    echo epic fail
fi
79
Petr Uzel

Petr Uzelがスポットですが、魔法の$?で遊ぶこともできます。

$?最後に実行されたコマンドの終了コードを保持します。これを使用すると、スクリプトを非常に柔軟に記述できます。

この質問は、このトピックに少し触れています bashで$?を使用するためのベストプラクティス

cmd1 
if [ "$?" -eq "0" ]
then
  echo "ok"
else
  echo "Fail"
fi

次に、必要に応じて、さまざまな終了コードに反応してさまざまなことを実行できます。

25
Johan

質問の疑似コードが質問のタイトルに対応していません。

コマンド1が失敗した場合にコマンド2を実行する方法を誰かが実際に知る必要がある場合、これは簡単な説明です。

  • cmd1 || cmd2:これはcmd1を実行し、失敗した場合はcmd2を実行します
  • cmd1 && cmd2:これはcmd1を実行し、成功した場合はcmd2を実行します
  • cmd1 ; cmd2:これはcmd1を実行し、次にcmd2を実行します。cmd1の実行の失敗や成功とは関係ありません。