当脚本关闭时删除日志文件?

问题描述:

  • 我有一个脚本,每分钟将其状态记录到文件中。
  • 状态栏然后显示此日志的内容。

当脚本中止时,日志对我来说没有兴趣,因为它已经过时。我希望它被删除。当脚本关闭时删除日志文件?

只有在脚本正在运行时会有文件存在才会消失吗?

我知道我可以编写另一个脚本来定期删除日志,但我正在寻找更高效的解决方案。

试试这个:

#!/bin/bash 

trap 'rm /path/to/log' EXIT TERM 

# ... 
+0

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

+0

相应编辑 – 2013-03-22 01:34:13

+0

其实'trap'cmd ...'EXIT'就够了。它将覆盖由'INT','TERM',...和'trap'cmd引起的退出......'EXIT TERM'将运行cmd **两次**如果脚本被'TERM'杀死的话。 – pynexj 2013-03-22 02:48:01

除了通过提到的陷阱“sputnick”你可能也想该文件明确地暂时的。临时文件的不利之处在于它可能最终会产生一个不方便的路径,如果您希望能够在命令行上对其执行任何操作,那么这一点很重要。

为了一个临时文件,使用mktemp,沿着这些线路:

tempFile="$(mktemp "${TMPDIR:-/tmp/}$(basename "$0")-XXXXX")" 

这将(一)包括在临时文件名脚本的名称,以及(b)使用$TMPDIR作为基础目录如果设置,但默认为/tmp,这是一般的良好做法。

至于trap,我认为你应该关心的主要信号是TERM,你也想要看到伪信号EXIT。我更喜欢将信号名称用于其便携式号码:

trap 'rm -f "${tempFile}"' EXIT TERM