r3m*_*m0t 5 shell bash exit background-process
我在 Ubuntu (lucid) 上使用sh( dash) 并且联机帮助页有这样的说法-e:
-e errexit 如果不是交互式的,如果任何未经测试的命令失败,立即退出。
命令的退出状态被认为是显式测试的
如果该命令用于控制 if、elif、while 或 until;或者
如果命令是“&&”或“||”的左操作数 歌剧?
托。
当后台命令失败时会发生什么?而且也bash表现不同在这方面?
测试这个非常简单。与-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)
bash或sh或 的结果相同zsh。