如果 shell 脚本中后台命令失败则退出

如果 shell 脚本中后台命令失败则退出

我确信这已被涵盖,但不确定如何找到答案:

#!/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"

相关内容