使:命令失败后如何继续?
$ make all
命令给出错误,如rm: cannot remove '.lambda': No such file or directory
所以它停止。 我希望它忽略rm-not-found-errors。 我该如何强制?
Makefile文件
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
(或者--keep-going
gnumake)将会按照你所要求的做,我想。
你真的应该find失败的del或rm行,并添加一个-f
来防止这个错误发生在别人身上。
改变干净
rm -f .lambda .lambda_t .activity .activity_t_lambda
即不要提示删除; 不要抱怨文件不存在。
为了让make实际上忽略单行上的错误,你可以简单地加上后缀; true
; true
,将返回值设置为0.例如:
rm .lambda .lambda_t .activity .activity_t_lambda 2>/dev/null; true
这会将stderr输出redirect到null,并按照命令的真实(总是返回0,致使make认为命令成功,而不pipe实际发生了什么),允许程序stream继续。
改变你的clean
所以rm
不会抱怨:
clean: rm -f .lambda .lambda_t .activity .activity_t_lambda
返回成功通过阻止rm
的返回码在true
命令,总是返回0
(成功)的pipe道后面,
rm file | true
在你的rm
命令中-f
选项。
rm -f .lambda .lambda_t .activity .activity_t_lambda