当脚本关闭时删除日志文件?
问题描述:
- 我有一个脚本,每分钟将其状态记录到文件中。
- 状态栏然后显示此日志的内容。
当脚本中止时,日志对我来说没有兴趣,因为它已经过时。我希望它被删除。当脚本关闭时删除日志文件?
只有在脚本正在运行时会有文件存在才会消失吗?
我知道我可以编写另一个脚本来定期删除日志,但我正在寻找更高效的解决方案。
答
试试这个:
#!/bin/bash
trap 'rm /path/to/log' EXIT TERM
# ...
答
除了通过提到的陷阱“sputnick”你可能也想该文件明确地暂时的。临时文件的不利之处在于它可能最终会产生一个不方便的路径,如果您希望能够在命令行上对其执行任何操作,那么这一点很重要。
为了一个临时文件,使用mktemp
,沿着这些线路:
tempFile="$(mktemp "${TMPDIR:-/tmp/}$(basename "$0")-XXXXX")"
这将(一)包括在临时文件名脚本的名称,以及(b)使用$TMPDIR
作为基础目录如果设置,但默认为/tmp
,这是一般的良好做法。
至于trap
,我认为你应该关心的主要信号是TERM
,你也想要看到伪信号EXIT
。我更喜欢将信号名称用于其便携式号码:
trap 'rm -f "${tempFile}"' EXIT TERM
with'trap'rm/path/to/log'0 1 2 3 15',我的脚本不再以^ C结尾。不过,它可以像'trap'rm/path/to/log'EXIT TERM'一样按预期工作。 – octosquidopus 2013-03-22 01:07:56
相应编辑 – 2013-03-22 01:34:13
其实'trap'cmd ...'EXIT'就够了。它将覆盖由'INT','TERM',...和'trap'cmd引起的退出......'EXIT TERM'将运行cmd **两次**如果脚本被'TERM'杀死的话。 – pynexj 2013-03-22 02:48:01