我有一个写入临时文件的脚本以帮助执行它。在我的脚本结束时,我只需调用rm filename
来清理我创建的临时文件。问题是脚本因错误而中断或被中断时。在这些情况下,永远不会达到rm
语句,因此永远不会清除文件。有没有办法可以指定一些命令在退出时运行,无论它是否成功退出?
答案 0 :(得分:2)
是;你可以写:
trap 'rm filename' EXIT
(请参阅§4.1 "Bourne Shell Builtins" of the Bash Reference Manual中trap
的说明。)
当然,在极端情况下命令不会运行 - 例如,如果有人突然拔出机器,或者甚至只是将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(或只是放置语句)