Linux生成文件:如何提前退出for循环并显示错误消息
我正在设置一个makefile来运行一个测试,该测试涉及将生成的文件列表与主目录中的对应文件进行区分。如果diff失败,我可以让循环工作并退出,但我还没有弄清楚如何包含失败消息,并且仍然立即退出for循环(和make过程) 以下是我所拥有的核心:Linux生成文件:如何提前退出for循环并显示错误消息,linux,for-loop,gnu-make,Linux,For Loop,Gnu Make,我正在设置一个makefile来运行一个测试,该测试涉及将生成的文件列表与主目录中的对应文件进行区分。如果diff失败,我可以让循环工作并退出,但我还没有弄清楚如何包含失败消息,并且仍然立即退出for循环(和make过程) 以下是我所拥有的核心: OUTFILE = $(patsubst $(MASTER_DIR1)/%,$(OUTDIR1)/%,$$file) default: test $(OUTDIR1): $(MKDIR) $(OUTDIR1) test: $(OUTDIR
OUTFILE = $(patsubst $(MASTER_DIR1)/%,$(OUTDIR1)/%,$$file)
default: test
$(OUTDIR1):
$(MKDIR) $(OUTDIR1)
test: $(OUTDIR)
@for file in $(MASTER_LIST1); do \
echo $$file; \
diff $(IGNORE_OPT) \
$$file \
$(OUTFILE) \
&& exit 1; \
done
这会在失败时退出,但不会告知用户原因。我尝试更改&&exit 1代码>行到:
&& (echo "Diff failed"; exit 1; ); \
显示错误消息但不再退出的
如何添加错误消息并立即退出
蒂亚 根据Etan Reisner在对原始问题的评论中提供的帮助,这是有效的解决方案:
test: $(OUTDIR)
@for file in $(MASTER_LIST1); do \
echo $$file; \
diff $(IGNORE_OPT) \
$$file \
$(OUTFILE) \
&& { echo "Diff failed"; exit 1; }; \
done
使用{…;}
代替(…)
<代码>()
是一个子外壳,您的出口会被吞没。也就是说,您不需要为此使用shell循环。你可以让它做所有的事情(通过为每个测试对创建目标,甚至仅仅用一个模式规则),然后失败只会导致停止。@ Etan Reisner,{DeRibe使用{{} }在长for for循环命令的中间应用吗?当我使用&&{echo“Diff failed”| | exit 1;}代码>gnumake抱怨意外的标记“}”。请注意我的示例块中的间距。{
后面的前导空格和}
前面的尾随空格一样重要。