2つのコマンドが&&演算子で連結されている場合、2番目のコマンドの代わりに1番目のコマンドを待つ方法

2つのコマンドが&&演算子で連結されている場合、2番目のコマンドの代わりに1番目のコマンドを待つ方法

次のようなbashループがありますfor

for file in *.mp4; do
  command1 "${file}" && command2 "${file}"
done

command2これにより、期待どおりに成功する限り実行が可能になります。command1

今私が望むものはループすることですcommand1完了のみ待つ、しかし待つ必要はありませんcommand2繰り返す前に完了しました。これを行う方法はありますか?

私は成功せずに試しました。

  • command1 && command2 &- 終了を待たずにcommand1並列に実行
  • command1 && ( command2 & )-command2出るまでお待ちください。必要ありません。

答え1

少し詳しくは、次のようにすると動作します。

for file in *.mp4; do
  if command1 "${file}"; then
    command2 "${file}" &
  fi
done

答え2

いいね@muruの返信それを主な答えとして受け入れます。

同様の方法も見つけましたが、これに代わるものとしてここに投稿します。

for file in *.mp4; do
  command1 "${file}"
  [ "${?}" -eq 0 ] && command2 "${file}" &
done

関連情報