Bash:コマンド1が失敗した場合は、コマンド2を実行します。

Bash:コマンド1が失敗した場合は、コマンド2を実行します。

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

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

どうすればいいですか?

答え1

これはあなたの要件を満たす必要があります。

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

または

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

答え2

質問の疑似コードが質問のタイトルと一致しません。

コマンド1が失敗した場合にコマンド2を実行する方法を実際に知る必要がある人がいる場合は、次の簡単な説明に従ってください。

  • cmd1 || cmd2:このコマンドは実行されcmd1、失敗した場合でも実行されます。cmd2
  • cmd1 && cmd2:実行されますcmd1。成功すると実行されます。cmd2
  • cmd1 ; cmd2:実行に失敗したか成功したかにかかわらず実行され、次にcmd1実行されます。cmd2cmd1

完全性のために、あなたの例ではthenキーワードを見逃しました。表示したいコードは次のように書かれています。

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

これは次のとおりです。

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

括弧はオプションなので左の関連性

このコードはcmd2正常に実行された場合にのみ実行されcmd1、そうでなければ失敗は直接エコーされます。

答え3

Petr Uzelの言葉は正しいです。しかし、$?という魔法を使うこともできます。

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

この質問はこのトピックと多少関連しています。$?使用のベストプラクティス バッシュから?

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

その後、必要に応じてさまざまな終了コードに応答してさまざまな操作を実行できます。

関連情報