我有两个后台作业,作业 ID 为 1 和 2。我想在作业 1 完成后做一些事情,但我不想挂起。
目前我得到的是wait 1 && do whatever
,但是这个命令它会自动阻止当前的 shell。我想让wait
它自己运行后台。我wait 1 & && do whatever
在 zsh 中尝试过,但不起作用。我收到一个错误zsh: parse error near '&&'
:
注意:我想要的是重要的在后台等待而不是等待一些后台作业完成。
答案1
语法错误是因为&
和&&
都是命令分隔符。&
在后台启动命令并立即运行下一个命令,同时&&
运行第一个命令,等待它完成,如果第一个命令成功则运行第二个命令。
要将您想要与第三个事物异步运行的两个事物作为背景,请使用以下模式:
( first_thing && second_thing ) &
third_thing
可选wait $!
后 third_thing
在继续之前完成前两个。
wait 1
等待 PID 1 完成,这在 shell 运行时不太可能发生。你会想要的wait %1
,等待着工作规范1.
答案2
我想wait
不是答案。根据这,tail
是一个更好的解决方案。我应该使用( tail --pid=WHATEVER -f /dev/null && do whatever ) &