在以下示例中,我希望在出现错误时删除foo
。不幸的是它不起作用。
foo:
perl -e 'die()' > $@ || [rm $@ -a true]
有什么不对?
答案 0 :(得分:3)
GNU make可以为您做到这一点。
Special Built-in Target Names:
.DELETE_ON_ERROR
如果在makefile中的任何位置提到
.DELETE_ON_ERROR
作为目标,那么make将删除规则的目标(如果它已更改并且其配方以非零退出状态退出),就像它收到时一样信号。
创建文件是非原子操作是一个普遍问题。并非总是可以在终止时删除不完整或损坏的文件,例如,当程序被SIGKILL
或OOM杀手杀死时。换句话说,所有涉及删除文件的解决方案都容易出现故障。
强大的通用解决方案是:
E.g:
foo:
perl -e 'die()' > $@~
mv --force $@~ $@
答案 1 :(得分:0)
这对我有用......
Died at -e line 1.
removing foo because exit code was 255
{{1}}