包装器在成功完成流程后重命名临时文件

包装器在成功完成流程后重命名临时文件

我正在寻找一种方法来完成以下任务:

  1. 运行一些旨在生成的命令foo.out
  2. 该解决方案替换为foo.out.tmp,以便目标命令实际上对与最终foo.out安装相同的临时文件进行操作。foo.out
  3. 进程终止:
    • 如果进程以退出代码 0 结束,则原子地mv -f foo.out.tmp foo.out
    • 如果没有,请将其留foo.out.tmp在原处,或将其删除,因为它可能是垃圾。

我看见清除失败命令的重定向输出文件然而它依赖于重定向标准输出,并且我有一些生成多个 foos ( foo.1.out, foo.2.out, foo.3.out, ...) 的命令。

我可以想象某种包装脚本,如果被告知需要创建,则foo.out[, ...]可以sed在运行子进程之前输入命令行,然后wait检查退出代码,或者执行一些LD_PRELOAD巫术来拦截open调用以修改参数。

对于我的用例,丢弃临时文件也完全令人满意。我想不出一种方法来使用 Docker 容器和一些狡猾的覆盖安装选项,这样一旦失败,整个输出卷就会消失。

在相当现代的 Linux(内核 4.x)上,如果有帮助的话。

相关内容