有没有办法在退出时执行命令(无论脚本如何退出)?

时间:2013-03-06 23:10:26

标签: bash exit

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

4 个答案:

答案 0 :(得分:2)

是;你可以写:

trap 'rm filename' EXIT

(请参阅§4.1 "Bourne Shell Builtins" of the Bash Reference Manualtrap的说明。)

当然,在极端情况下命令不会运行 - 例如,如果有人突然拔出机器,或者甚至只是将SIGKILL发送到运行脚本的Bash实例 - 但这和你一样可靠可以得到。

答案 1 :(得分:2)

是的,你可以这样使用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

答案 2 :(得分:0)

对于中断,您可以使用onintr指定删除文件的处理程序,然后退出。

答案 3 :(得分:0)

中断:设置脚本以捕获SIGHUP和SIGTERM等信号。除了SIGKILL(无法捕获)之外,这将帮助您解决所有问题。谷歌“bash脚本陷阱信号”

对于非成功退出:构造代码,以便在退出脚本之前调用函数rm filename(或只是放置语句)