首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >shell脚本中的陷阱exec返回代码

shell脚本中的陷阱exec返回代码
EN

Stack Overflow用户
提问于 2018-05-13 18:04:13
回答 1查看 410关注 0票数 0

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

代码语言:javascript
复制
#!/bin/sh
set +e
exec command_that_will_fail
if [ $? -eq 1 ]; then
    echo "command failed, running another command"
fi

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

EN

回答 1

Stack Overflow用户

发布于 2018-05-13 18:25:16

如果您的代码在尝试运行进程时出现一些即时错误,则代码可以正常工作:

代码语言:javascript
复制
$ echo 1
1
$ echo $?
0
$ exec asd123
-bash: exec: asd123: not found
$ echo $?
127

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

例如,这永远不会返回:

代码语言:javascript
复制
$ exec grep asd /dev/null

( grep的退出代码是1,但是父shell被覆盖了,所以没人能检查)

在这种情况下,如果您想从进程中获得退出代码,则必须将其作为子进程启动,即不使用exec (仅使用command_that_will_fail)。在这种情况下,bash进程将充当监控器,等待到子进程完成,并可以检查退出代码。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50314933

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档