我正在尝试对一些现有的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。
是否有办法使用陷阱实现目标?
答案 0 :(得分:1)
[
是test
的同义词,因此[ 5>4 ]
等于test 5>4
。 Bash在 run test
时读取此命令,并将文件描述符5
重定向到名为4
的文件,并且不带参数test
并以{{1 }}。有关更多信息,请参见bash manual#Redirections。
您应该已经注意到在工作目录btw中创建了名为0
的文件。