当前位置:  开发笔记 > 编程语言 > 正文

在Bash中退出陷阱代码

如何解决《在Bash中退出陷阱代码》经验,为你挑选了1个好方法。

这是myscript.sh:

#!/bin/bash

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

exit 3

当我运行它:

> ./myscript.sh
echo $?
3

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

    echo返回0

    我希望mytrap能回归0

    由于mytrap是最后执行的函数,脚本应返回0

为什么不是这样?我的想法错在哪里?



1> Inian..:

从下面的man bash页面看参考,

exit [n]导致shell退出,状态为n.如果省略n,则退出状态是最后执行的命令的状态.在shell终止之前执行EXIT上的陷阱.

你有脚本的调试版本来证明,

+ trap mytrap EXIT
+ exit 3
+ mytrap
+ echo 'Trapped!'
Trapped!

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

function mytrap {
    echo "Trapped!"
    exit 1
}

查看脚本的扩展版本,

+ trap mytrap EXIT
+ exit 3
+ mytrap
+ echo 'Trapped!'
Trapped!
+ exit 1

echo $?
1

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

function mytrap {
    echo "$?"
    echo "Trapped!"
}


如果在陷阱代码中放置一个`exit 1`,那将是脚本的退出代码.
推荐阅读
夏晶阳--艺术
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有