gpt4 book ai didi

shell - 在shell脚本中捕获exec返回代码

转载 作者:行者123 更新时间:2023-12-03 08:47:36 25 4
gpt4 key购买 nike

我必须在 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没有成功,我需要运行另一个命令。

最佳答案

如果尝试运行该过程时出现一些立即错误,则您的代码将起作用:

$ 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进程将充当主管,该主管将等待子进程完成并可以检查退出代码。

关于shell - 在shell脚本中捕获exec返回代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50314933/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com