trap exec返回shell脚本中的代码

时间:2018-05-13 10:04:13

标签: shell error-handling exec

我必须在shell脚本中使用exec运行命令,我需要在出现错误时捕获退出代码并运行另一个命令,例如

TARGET = $$qtLibraryTarget(NLPro)

我理解exec替换了当前的shell并继续,我的问题是如果exec不成功,我需要运行另一个命令。

1 个答案:

答案 0 :(得分:0)

如果尝试运行该过程时出现一些立即错误,则代码可以正常运行:

$ echo 1
1
$ echo $?
0
$ exec asd123
-bash: exec: asd123: not found
$ echo $?
127

如果找到并且启动了可执行文件,那么它将不会返回,因为它将超过整个脚本并且永远不会再次返回bash。

例如,这永远不会返回:

$ exec grep asd /dev/null

(grep的退出代码是1,但父shell被超越,所以没有人可以检查)

如果要在这种情况下从进程中获取退出代码,则必须将其作为子进程启动,即不使用exec(仅command_that_will_fail)。在这种情况下,bash进程将充当一个主管,它等待子进程完成并可以检查退出代码。