Shell - Run additional command on failure
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
精彩评论