首页 > 解决方案 > 如何修复 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。

有没有办法使用陷阱来实现我的目标,还是有替代方法?

标签: bash

解决方案


[是 的同义词test,所以[ 5>4 ]等于test 5>4。Bash 将此命令读取为运行test并将文件描述符重定向5到名为 的文件4,并且不带参数以 .test退出0。有关详细信息,请参阅bash 手册#Redirections

您应该已经注意到,4顺便说一句,在您的工作目录中创建了一个名为的文件。


推荐阅读