Shell - запустить дополнительную команду при ошибке
У меня есть этот скрипт, который я сейчас запускаю, который отлично работает для всех экземпляров, кроме одного:
#!/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
".
Спасибо
3 ответа
Пытаться:
/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
работает в фоновом режиме, вы не знаете, сколько времени может потребоваться для завершения. Пусть он блокируется, поэтому код в паренсе достигается только в том случае, если он работает.
Обтекание функций, которое может легко запускаться в фоновом режиме, но каждый процесс блокируется, пока первая команда не завершится, как ожидалось.
Короткое замыкание "ИЛИ" должно делать то, что вы хотите:
pdf2swf test.opt.pdf test.swf || pdf2swf test.pdf test.swf
Может быть, вы хотите Makefile вместо сценария оболочки. Makefile автоматически прерывает работу при сбое одной из команд. Кроме того, вы можете добавить [ "$?" -ne 0 ] && exit 2
после каждой команды