Shell - 失败时运行其他命令

时间:2010-04-16 14:04:36

标签: linux bash shell command pdf2swf

我有一个我目前正在运行的脚本,它适用于所有实例,但只有一个:

 #!/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”。

由于

3 个答案:

答案 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中的代码。

可以在后台轻松启动的函数包装,但每个进程都会阻塞,直到第一个命令按预期退出。