我必须在shell脚本中使用exec运行一个命令,并且我需要捕获错误的退出代码并运行另一个命令。
#!/bin/sh
set +e
exec command_that_will_fail
if [ $? -eq 1 ]; then
echo "command failed, running another command"
fi我知道exec替换了当前的shell并继续运行,我的问题是如果exec不成功,我需要运行另一个命令。
发布于 2018-05-13 18:25:16
如果您的代码在尝试运行进程时出现一些即时错误,则代码可以正常工作:
$ 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进程将充当监控器,等待到子进程完成,并可以检查退出代码。
https://stackoverflow.com/questions/50314933
复制相似问题