如何在Bash脚本退出之前运行命令?
如果Bash脚本具有如何在Bash脚本退出之前运行命令?,bash,Bash,如果Bash脚本具有set-e,并且脚本中的命令返回错误,那么如何在脚本退出之前进行清理 例如: #!/bin/bash set -e mkdir /tmp/foo # ... do stuff ... rm -r /tmp/foo 如何确保删除/tmp/foo,即使中的某个命令。。。执行任务…失败?来自集合的参考: -e 如果简单命令(请参阅第3.2.1节简单命令)以非零状态退出,则立即退出,除非失败的命令是TILL或while循环的一部分、if语句的一部分、&&或| |列表的一部分,或者如
set-e
,并且脚本中的命令返回错误,那么如何在脚本退出之前进行清理
例如:
#!/bin/bash
set -e
mkdir /tmp/foo
# ... do stuff ...
rm -r /tmp/foo
如何确保删除
/tmp/foo
,即使中的某个命令。。。执行任务…
失败?来自集合的参考:
-e
如果简单命令(请参阅第3.2.1节简单命令)以非零状态退出,则立即退出,除非失败的命令是TILL或while循环的一部分、if语句的一部分、&&或| |列表的一部分,或者如果命令的返回状态正在使用!反转!。如果设置了ERR,则在shell退出之前执行trap on ERR
(我的重点)。来自bash
手册页(关于内置):
陷阱[-lp][[arg]sigspec…]
命令arg将在shell
接收信号sigspec
因此,如中所示,在脚本的早期调用trap
,以设置所需的ERR处理程序。下面是一个使用trap的示例:
#!/bin/bash -e
function cleanup {
echo "Removing /tmp/foo"
rm -r /tmp/foo
}
trap cleanup EXIT
mkdir /tmp/foo
asdffdsa #Fails
输出:
dbrown@luxury:~ $ sh traptest
t: line 9: asdffdsa: command not found
Removing /tmp/foo
dbrown@luxury:~ $
请注意,即使asdffdsa行失败,清理仍会执行。sh
版本的devguydavid
#/垃圾箱/垃圾箱
set-e
清理(){
回显“删除/tmp/foo”
rm-r/tmp/foo
}
陷阱清理出口
mkdir/tmp/foo
asdffdsa失败
ref:运行help trap
查看内置的帮助。POSIX
让我微笑。:)您也链接到了一个很棒的教学网站。当使用“-E”时,可能值得添加“-E”,请参阅