命令
$ make all
会给出诸如 rm: cannot remove '.lambda': No such file or directory
之类的错误,因此它会停止。我希望它忽略 rm-not-found-errors。我怎样才能强行制作?
生成文件
all:
make clean
make .lambda
make .lambda_t
make .activity
make .activity_t_lambda
clean:
rm .lambda .lambda_t .activity .activity_t_lambda
.lambda:
awk '{printf "%.4f \n", log(2)/log(2.71828183)/$$1}' t_year > .lambda
.lambda_t:
paste .lambda t_year > .lambda_t
.activity:
awk '{printf "%.4f \n", $$1*2.71828183^(-$$1*$$2)}' .lambda_t > .activity
.activity_t_lambda:
paste .activity t_year .lambda | sed -e 's@\t@\t\&\t@g' -e 's@$$@\t\\\\@g' | tee > .activity_t_lambda > ../RESULTS/currentActivity.tex
尝试使用
-i
标志(或 --ignore-errors
)。 文档似乎提出了一种更强大的方法来实现这一点,顺便说一句:
要忽略命令行中的错误,请在该行文本的开头(在初始选项卡之后)写入
。在命令传递到 shell 执行之前,-
将被丢弃。-
例如,
clean: -rm -f *.o
这会导致
即使无法删除文件也会继续。rm
所有示例均带有
rm
,但适用于您需要忽略错误的任何其他命令(即 mkdir
)。
make -k
(或 gnumake 上的 --keep-going
)会满足您的要求。
您确实应该找到失败的 del 或 rm 行,并向其添加
-f
以防止该错误发生在其他人身上。
通过使用
rm
命令在管道后面阻止 true
的返回码来成功返回,该命令始终返回 0
(成功)。
请注意,
||
运算符在 shell 中表示 OR。这意味着您基本上正在执行 command OR true
,它将始终返回 true
,因此任何使用它的脚本都将继续。
rm file || true
将清洁更改为
rm -f .lambda .lambda_t .activity .activity_t_lambda
即不提示删除;如果文件不存在,请不要抱怨。
要让 make 实际上忽略单行上的错误,您只需在其后面加上
; true
后缀,将返回值设置为 0。例如:
rm .lambda .lambda_t .activity .activity_t_lambda 2>/dev/null; true
这会将 stderr 输出重定向到 null,并在命令后面加上 true(它始终返回 0,使 make 相信命令成功,无论实际发生了什么),从而允许程序流程继续。
在
-f
命令中添加 rm
选项。
rm -f .lambda .lambda_t .activity .activity_t_lambda
改变你的
clean
,这样rm
就不会抱怨:
clean:
rm -f .lambda .lambda_t .activity .activity_t_lambda