我想将命令编写为 if 的条件语句,即当命令执行时没有任何错误,它应该打印成功,如果失败则打印失败。 我什至试图阻止打印命令的长控制台消息。 下面是我正在使用的代码,它在没有任何条件语句(如打印成功或失败消息)的情况下工作得很好。
$(BASENAME).pdf: $(BASENAME).ps
ps2pdf $(BASENAME).ps $(BASENAME).pdf
$(BASENAME).ps: $(BASENAME).dvi
dvips -Ppdf $(BASENAME).dvi -o $(BASENAME).ps
我试着把上面的改成
$(BASENAME).pdf: $(BASENAME).ps
@out=ps2pdf $(BASENAME).ps $(BASENAME).pdf > /dev/null 2>&1 && echo " 5. ps2pdf successful" || echo " 5. ps2pdf failed"
$(BASENAME).ps: $(BASENAME).dvi
dvips -Ppdf $(BASENAME).dvi -o $(BASENAME).ps > /dev/null 2>&1\
if [ $? -eq 0 ];\
then \
echo " 4. dvips successful";\
else \
echo " 4. dvips failed";\
exit 2;\
fi
我的执行失败并在运行如下错误代码时向我提供错误
dvips -Ppdf basename_04.dvi -o basename_04.ps \
if [ basename_04.dvi -eq 0 ];\
then \
echo " 4. dvips successful";\
else \
echo " 4. dvips failed";\
exit 2;\
fi
/bin/sh: -c: line 2: syntax error near unexpected token `then'
/bin/sh: -c: line 2: ` then \'
make: *** [basename_04.ps] Error 1
即使在使用分号更新后,我仍然遇到以下错误。
dvips -Ppdf nkukunur_04.dvi -o nkukunur_04.ps > /dev/null 2>&1 ;\
if [ nkukunur_04.dvi -eq 0 ]; \
then \
echo " 4. dvips successful"; \
else \
echo " 4. dvips failed"; \
exit 2; \
fi
/bin/sh: line 1: [: nkukunur_04.dvi: integer expression expected
4. dvips failed
请帮我解决这个问题。
最佳答案
你少了一个分号——和一个双倍的美元:
$(BASENAME).ps: $(BASENAME).dvi
dvips -Ppdf $(BASENAME).dvi -o $(BASENAME).ps; \
if [ $$? -eq 0 ]; \
then \
echo " 4. dvips successful"; \
else \
echo " 4. dvips failed"; \
exit 2; \
fi
缺少的分号是第一个命令行末尾的分号(在 $(BASENAME).ps
之后和反斜杠之前)。假设 make
将反斜杠换行符替换为空白(不是换行符)。这就是测试后需要分号的原因;这就是为什么您在 if
之前也需要一个。
需要双美元,因为 $?
是一个 Make 宏,但您希望 shell 看到并解释 $?
。因此,您可以使用 $$
将其从 Make 中隐藏起来,这是一个扩展为 $
的宏调用。
关于linux - 如何在 if 语句等条件下编写命令?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47881505/