Question

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 &>/dev/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

Was it helpful?

Solution

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.

OTHER TIPS

Short circuiting "OR" should do what you want:

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

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

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top