如何修复if / while语句中的退出代码

时间:2019-05-08 08:36:48

标签: bash

我正在尝试对一些现有的bash脚本进行清理,它们与此功能相关的功能是它们创建了一个日志文件并具有多个exit语句。我要实现的目的是在脚本退出之前移动日志文件,然后使用与调用原始出口相同的代码退出,发现的一种方法是使用陷阱,我编写了一个简单的脚本捕获代码:

#!/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。

是否有办法使用陷阱实现目标?

1 个答案:

答案 0 :(得分:1)

[test的同义词,因此[ 5>4 ]等于test 5>4。 Bash在 run test时读取此命令,并将文件描述符5重定向到名为4 的文件,并且不带参数test并以{{1 }}。有关更多信息,请参见bash manual#Redirections

您应该已经注意到在工作目录btw中创建了名为0的文件。