1

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

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

谢谢

4

3 回答 3

5

短路“或”应该做你想做的事:

pdf2swf test.opt.pdf test.swf || pdf2swf test.pdf test.swf
于 2010-04-16T14:11:27.440 回答
1

也许你想要一个 Makefile 而不是 shell 脚本。如果其中一个命令失败,makefile 会自动中止。或者,您可以[ "$?" -ne 0 ] && exit 2在每个命令之后添加

于 2010-04-16T14:07:45.890 回答
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在后台运行,您不知道可能需要多长时间才能完成。让它阻塞,所以只有当它工作时才能到达括号中的代码。

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

于 2010-04-16T14:19:47.503 回答