Попробуйте:
/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
работает в фоновом режиме, вы не представляете, сколько времени это займет, чтобы завершить. Пусть он блокируется, поэтому код в паренсе достигается только в том случае, если он сработал.
Обтекание функции, которое может легко запускаться в фоновом режиме, но каждый процесс блокируется, пока первая команда не завершится, как ожидалось.