我正在寻找一种方法来完成以下任务:
- 运行一些旨在生成的命令
foo.out
- 该解决方案替换为
foo.out.tmp
,以便目标命令实际上对与最终foo.out
安装相同的临时文件进行操作。foo.out
- 进程终止:
- 如果进程以退出代码 0 结束,则原子地
mv -f foo.out.tmp foo.out
- 如果没有,请将其留
foo.out.tmp
在原处,或将其删除,因为它可能是垃圾。
- 如果进程以退出代码 0 结束,则原子地
我看见清除失败命令的重定向输出文件然而它依赖于重定向标准输出,并且我有一些生成多个 foos ( foo.1.out, foo.2.out, foo.3.out, ...
) 的命令。
我可以想象某种包装脚本,如果被告知需要创建,则foo.out[, ...]
可以sed
在运行子进程之前输入命令行,然后wait
检查退出代码,或者执行一些LD_PRELOAD
巫术来拦截open
调用以修改参数。
对于我的用例,丢弃临时文件也完全令人满意。我想不出一种方法来使用 Docker 容器和一些狡猾的覆盖安装选项,这样一旦失败,整个输出卷就会消失。
在相当现代的 Linux(内核 4.x)上,如果有帮助的话。