首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Bash陷阱出口代码

Bash陷阱出口代码
EN

Stack Overflow用户
提问于 2017-01-12 17:39:45
回答 1查看 6.8K关注 0票数 11

我是myscript.sh

代码语言:javascript
复制
#!/bin/bash

function mytrap {
    echo "Trapped!"
}
trap mytrap EXIT

exit 3

当我运行它时:

代码语言:javascript
复制
> ./myscript.sh
echo $?
3

为什么脚本的退出代码--带陷阱的退出代码--与没有它相同?通常,函数会隐式返回执行的最后一个命令的退出代码。在这种情况下:

  1. 回波返回0
  2. 我希望mytrap返回0
  3. 因为mytrap是执行的最后一个函数,所以脚本应该返回0

为何不是这样呢?我哪里想错了?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-01-12 17:47:03

查看下面man bash页面中的参考资料,

退出n使shell退出状态为n。如果省略n,则退出状态是最后执行的命令的退出状态。在退出上的一个陷阱在终止之前执行

脚本的调试版本可以证明,

代码语言:javascript
复制
+ trap mytrap EXIT
+ exit 3
+ mytrap
+ echo 'Trapped!'
Trapped!

考虑与您在注释中提到的相同,返回错误代码的trap函数,

代码语言:javascript
复制
function mytrap {
    echo "Trapped!"
    exit 1
}

看看脚本的扩展版本,

代码语言:javascript
复制
+ trap mytrap EXIT
+ exit 3
+ mytrap
+ echo 'Trapped!'
Trapped!
+ exit 1

代码语言:javascript
复制
echo $?
1

要捕获trap函数上的退出代码,

代码语言:javascript
复制
function mytrap {
    echo "$?"
    echo "Trapped!"
}
票数 10
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41619629

复制
相关文章

相似问题

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