我在 Ubuntu(清晰)上使用sh
( dash
) ,并且联机帮助页有这样的说明-e
:
-e errexit 如果不是交互式的,如果任何未经测试的命令失败,则立即退出。 命令的退出状态被认为是显式测试的 if 命令用于控制 if、elif、while 或 Until;或者 如果命令是“&&”或“||”的左侧操作数歌剧- 托尔。
当后台命令失败时会发生什么?bash
在这方面表现是否有所不同?
答案1
测试这个非常简单。和-e
:
% bash -e -c 'false & echo waiting; if wait $!; then echo success; else echo failure; fi'
waiting
failure
因此,如果后台命令失败,shell 将不会自动退出(-e
这还不够)。
如果您wait
在显式测试之外,wait
将返回失败的后台进程的返回代码。在这种情况下,如果-e
指定,shell 将退出:
% bash -e -c 'false & echo waiting; wait $!; echo returned'
waiting
bash
与或相同的结果sh
。zsh