2013-03-06 60 views
5

我有一个脚本写出临时文件来帮助它的执行。在我的脚本结尾,我只需拨打rm filename来清理我创建的临时文件。问题是脚本由于错误或被中断而结束。在这些情况下,rm声明永远不会到达,因此文件永远不会被清理。有没有一种方法可以指定一些命令在退出时运行,而不管它是否成功退出?有没有办法在退出时执行命令(无论脚本如何退出)?

+0

看看这里之前 - 可能是什么你正在寻找 http://stackoverflow.com/questions/64786/error-handling-in-bash – repoman 2013-03-06 23:14:14

回答

0

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

2

是;你可以这样写:

trap 'rm filename' EXIT 

(见的trap的描述§4.1 "Bourne Shell Builtins" of the Bash Reference Manual

当然有些情况下该命令将不会运行—如极端情况下,如果有人突然拔掉机器,甚至只是将SIGKILL发送到运行脚本—的Bash实例,但是这可以获得尽可能可靠的结果。

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 
+0

嗯,这似乎并没有为我工作。当脚本退出时,这些文件仍然存在 – imnotfred 2013-03-06 23:24:07

+0

请尝试我发布的示例,如果您有权删除相关文件,应该可以正常工作。 – Martin 2013-03-07 00:41:48

0

对于中断:设置脚本像SIGHUP和陷阱信号SIGTERM。除了SIGKILL(无法捕获)之外,这将帮助你完成所有任务。谷歌“bash脚本陷阱信号”

对于nonsuccessful退出:结构你的代码,这样你打电话rm文件名的函数(或者只是把语句)退出脚本