bash - 如何修复 if/while 语句中的退出代码
问题描述
我正在尝试向一些现有的 bash 脚本添加清理,它们与此问题相关的功能是它们创建一个日志文件并具有多个退出语句。我想要实现的是在脚本退出之前移动日志文件,然后使用与调用原始退出相同的代码退出,我发现这样做的一种方法是使用陷阱,我编写了一个简单的脚本捕获代码:
#!/bin/bash
cleanup() {
exit_code=$?
echo trapped exit, code=$exit_code
trap 'exit 0' EXIT
}
trap cleanup EXIT
exit 4
如果您运行脚本,它会回显正确的退出代码并随之退出。但是,如果不是
exit 4
我可以在 if/while 循环中退出,例如:
if [ 5>4 ] ; then
exit 4
fi
我得到退出代码0。
有没有办法使用陷阱来实现我的目标,还是有替代方法?
解决方案
[
是 的同义词test
,所以[ 5>4 ]
等于test 5>4
。Bash 将此命令读取为运行test
并将文件描述符重定向5
到名为 的文件4
,并且不带参数以 .test
退出0
。有关详细信息,请参阅bash 手册#Redirections。
您应该已经注意到,4
顺便说一句,在您的工作目录中创建了一个名为的文件。
推荐阅读
- sql - SQL 查询从可变日期找出一周的非周末(周一至周五)日期
- odoo - 如何在 Odoo 13 中使用 many2one 为字段创建记录?
- reactjs - Material-UI 按钮需要单击 3 次才能呈现菜单
- python - 使用 selenium xpath 定位元素
- r - 在R中的循环中使用字符串作为对象名称
- oracle11g - 如何将子查询结果合并到每行另一个子查询的结果?
- python - 如何使用ansible为来自python dict的主机设置具有不同计划时间的cronjobs?
- python - 使用 selenium 抓取链接(href)的问题;href="#"
- javascript - 在graphQL中,如果我发送太多查询有时会出现graphql网络错误:响应不成功:收到状态码400我该如何解决?
- swift - 以编程方式将视图水平添加到 UIScrollView