开发者

Shell - Run additional command on failure

开发者 https://www.devze.com 2022-12-27 16:50 出处:网络
I have this script that I am currently running that works great for all instances but one: #!/bin/sh pdfopt test.pdf test.opt.pdf &>/开发者_如何学Godev/null

I have this script that I am currently running that works great for all instances but one:

 #!/bin/sh
 pdfopt test.pdf test.opt.pdf &>/开发者_如何学Godev/null
 pdf2swf test.opt.pdf test.swf
 [ "$?" -ne 0 ] && exit 2

More lines to execute follow the above code ...

How would I go about changing this script to run "pdf2swf test.pdf test.swf" if "pdf2swf test.opt.pdf test.swf" fails? If the second attempt fails, then I would "exit 2".

Thanks


Short circuiting "OR" should do what you want:

pdf2swf test.opt.pdf test.swf || pdf2swf test.pdf test.swf


Try:

/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

In your example:

pdfopt test.pdf test.opt.pdf &>/dev/null

... pdfopt runs in the background, you have no idea how long it may take to complete. Let it block, so the code in the parens is reached only if it worked.

A function wrapping that could easily launch in the background, but each process blocks until the first command exits as expected.


Maybe you want a Makefile instead of a shell script. A makefile aborts automatically it one of the commands fail. Alternatively, you can add [ "$?" -ne 0 ] && exit 2 after every command

0

精彩评论

暂无评论...
验证码 换一张
取 消

关注公众号