我有一个我目前正在运行的脚本,它适用于所有实例,但只有一个:
#!/bin/sh
pdfopt test.pdf test.opt.pdf &>/dev/null
pdf2swf test.opt.pdf test.swf
[ "$?" -ne 0 ] && exit 2
要执行更多行,请遵循以上代码...
如果“pdf2swf test.pdf test.swf
”失败,我将如何更改此脚本以运行“pdf2swf test.opt.pdf test.swf
”?如果第二次尝试失败,那么我会“exit 2
”。
由于
答案 0 :(得分:5)
短路“或”应该做你想做的事:
pdf2swf test.opt.pdf test.swf || pdf2swf test.pdf test.swf
答案 1 :(得分:1)
也许你想要一个Makefile而不是一个shell脚本。 makefile会自动中止,其中一个命令失败。或者,您可以在每个命令
之后添加[ "$?" -ne 0 ] && exit 2
答案 2 :(得分:1)
尝试:
/path/to/pdfopt test.pdf test.opt.pdf >/dev/null && {
pdf2swf test.opt.pdf test.swf
... maybe do more stuff here, in the future ...
exit_here_nicely
}
code_that_is_reached_if_pdfopt_failed
在你的例子中:
pdfopt test.pdf test.opt.pdf &>/dev/null
... pdfopt
在后台运行,您不知道可能需要多长时间才能完成。让它阻塞,所以只有在它起作用的情况下才能达到parens中的代码。
可以在后台轻松启动的函数包装,但每个进程都会阻塞,直到第一个命令按预期退出。