如果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行失败,清理仍然被执行。