我想将命令编写为条件语句if 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
请帮我解决问题。
答案 0 :(得分:0)
所以,我不知道使用conditional directives与使用普通Bash条件的最佳做法是什么。但要修复代码,请在第一行后删除反斜杠:
dvips -Ppdf $(BASENAME).dvi -o $(BASENAME).ps <<<< removed backslash
if [ $? -eq 0 ];\
then \
echo " 4. dvips successful";\
else \
echo " 4. dvips failed";\
exit 2;\
fi
否则所有行都作为单个bash语句执行:if
直到分号作为参数传递给dvips
并且then
开始一个新语句,因此意外的令牌错误