Answers:
这是使用陷阱的示例:
#!/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行失败,清除仍会执行。
从bash
联机帮助页(关于内置文件):
trap [-lp] [[arg] sigspec ...]
当shell接收到信号sigspec时,将读取并执行命令arg。
因此,如Anon。的回答所示,请trap
在脚本的早期调用以在ERR上设置所需的处理程序。
从参考set
:
-e
如果简单命令(请参阅3.2.1简单命令)以非零状态退出,则立即退出,除非失败的命令是直到或while循环的一部分,if语句的一部分,&&或||的一部分。列表,或者使用!反转命令的返回状态。如果设置了ERR,则会在外壳程序退出之前执行陷阱。
(强调我的)。
help trap
以查看内置的一些帮助。