7

我有一个脚本可以写入临时文件以帮助其执行。在我的脚本结束时,我只是调用rm filename来清理我创建的临时文件。问题是脚本因错误而结束或被中断。在这些情况下,rm永远不会到达该语句,因此永远不会清理文件。有没有办法可以指定一些命令在退出时运行,无论它是否成功退出?

4

4 回答 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 回答