sh -e 如何与 & 交互?

r3m*_*m0t 5 shell bash exit background-process

我在 Ubuntu (lucid) 上使用sh( dash) 并且联机帮助页有这样的说法-e

           -e errexit 如果不是交互式的,如果任何未经测试的命令失败,立即退出。
                            命令的退出状态被认为是显式测试的
                            如果该命令用于控制 if、elif、while 或 until;或者
                            如果命令是“&&”或“||”的左操作数 歌剧?
                            托。

当后台命令失败时会发生什么?而且也bash表现不同在这方面?

Sté*_*nez 5

测试这个非常简单。与-e

% bash -e -c 'false & echo waiting; if wait $!; then echo success; else echo failure; fi'
waiting
failure
Run Code Online (Sandbox Code Playgroud)

因此,如果后台命令失败,shell 将不会自动退出(-e还不够)。

如果您wait在显式测试之外,wait将返回失败的后台进程的返回码。在这种情况下,如果-e指定,shell 将退出:

% bash -e -c 'false & echo waiting; wait $!; echo returned'   
waiting
Run Code Online (Sandbox Code Playgroud)

bashsh或 的结果相同zsh