如果Bash脚本设置了-e,并且脚本中的命令返回错误,那么在脚本退出之前如何进行一些清理?
例如:
- #!/bin/bash
- set -e
- mkdir /tmp/foo
- # ... do stuff ...
- rm -r /tmp/foo
我怎样才能确保删除/ tmp / foo,即使……中的某个命令做了什么……失败了?
以下是使用陷阱的示例:
- #!/bin/bash
- set -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行失败,仍会执行清理.