shell 脚本退出或崩溃后自动删除生成的文件

shell 脚本退出或崩溃后自动删除生成的文件

我有一个相当长的 bash 进程,它生成一些临时文件,其中一些文件具有生成的名称和几乎随机的名称。

我希望避免在流程失败后手动删除它们。是否有一个临时目录(例如附加到 PID 的临时目录)一旦 PID 结束就会“自动删除”?如果没有,将是一个很好的补充。

一种方法是创建并使用此目录作为全局临时目录,但是,该目录将在进程异常结束后mkdir /tmp/$$保留​​。/tmp

我本来希望使用trap "rm -rf /tmp/$$" EXIT但也不起作用并使用 trap... RETURN;太宽泛了。

我正在寻找通用的、可用于每个 shell 或其他用户程序的东西。

是否存在临时目录是或否?

答案1

我将如何做到这一点是:

tempdir=$(mktemp -d)
function cleanup {
  rm -rf "$tempdir"
}

trap cleanup EXIT
trap cleanup SIGINT

我尝试了一些效果很好的用例:

tempdir=$(mktemp -d)
function cleanup {
  rm -rf "$tempdir"
}

trap cleanup EXIT
trap cleanup SIGINT

echo "$tempdir"
sleep infinity

如果我找到PIDkill( SIGTERM) 它,则它$tempdir会被清理如果我使用 CTRL+C (SIGINT),则它$tempdir会被清理。

这是另一个例子:

tempdir=$(mktemp -d)
function cleanup {
  rm -rf "$tempdir"
}

trap cleanup EXIT
trap cleanup SIGINT

echo "$tempdir"
set -e
/bin/false

这将模拟您的“流程失败”。当false返回时,set -e将结束这个脚本。最后仍然会调用陷阱并且目录仍然会被删除。

如果您有其他需要捕获的情况,我们可以添加更多信号。您还有其他不起作用的用例吗?

唯一不能捕获的是SIGKILL

相关内容