我有一个脚本可以写入临时文件以帮助其执行。在我的脚本结束时,我只是调用rm filename
来清理我创建的临时文件。问题是脚本因错误而结束或被中断。在这些情况下,rm
永远不会到达该语句,因此永远不会清理文件。有没有办法可以指定一些命令在退出时运行,无论它是否成功退出?
问问题
1486 次
4 回答
4
是的,你可以trap
这样使用:
trap "rm -f filename" EXIT
脚本可能如下所示:
#/bin/bash
trap "rm -f filename" EXIT # remove file when script exits
touch filename # create file
some-invalid-command # trigger an error
于 2013-03-06T23:14:02.083 回答
2
是的; 你可以写:
trap 'rm filename' EXIT
(参见Bash 参考手册§4.1 “Bourne Shell Builtins” 中的trap
描述。)
当然,在某些极端情况下命令不会运行——例如,如果有人突然拔掉机器,或者只是发送SIGKILL
到运行脚本的 Bash 实例——但这几乎是你能得到的最可靠的。
于 2013-03-06T23:13:51.473 回答
0
对于中断,您可以使用onintr
指定删除文件然后退出的处理程序。
于 2013-03-06T23:13:41.177 回答
0
对于中断:设置脚本以捕获 SIGHUP 和 SIGTERM 等信号。这将帮助您处理除 SIGKILL (无法被捕获)之外的所有问题。谷歌“bash 脚本陷阱信号”
对于不成功的退出:构造您的代码,以便在退出脚本之前调用一个函数来 rm 文件名(或只是放置语句)
于 2013-03-06T23:14:16.743 回答