我确信这已被涵盖,但不确定如何找到答案:
#!/usr/bin/env bash
set -e;
false &
wait;
echo "lol"
如果我们运行这个,我们会得到“lol”。
如果后台命令(在本例中为“false”)以非零退出,是否有办法退出脚本?
在这种情况下,set -e;
如果命令以非零值退出,并且该命令在后台运行,则似乎不会阻止脚本继续。
答案1
如果您使用的是最新版本的 bash(我认为这是在 bash 4 中引入的),那么您可以使用wait -n
.
否则,您可以传递wait
带有您启动的后台进程的 pid 的参数,该参数$!
在您执行操作后立即返回。
请参阅等待命令的文档有关wait
命令返回状态的更多详细信息。
这应该可以做到:
set -e
false &
wait -n
echo "lol"
这也很好:
set -e
false &
background_pid=$!
wait "${background_pid}"
echo "lol"