如何等待第一个命令而不是第二个命令,其中两个命令由 && 运算符连接

如何等待第一个命令而不是第二个命令,其中两个命令由 && 运算符连接

我有一个for像这样的 bash 循环:

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

相关内容