Try:
my_command || { echo 'my_command failed' ; exit 1; }
Четыре изменения:
- Изменить
&&
для ||
- Использование
{ }
вместо ()
- Введение
;
после exit
и
- пространства после
{
и до }
Так как вы хотите, чтобы напечатать сообщение и выход только тогда, когда команда выходит из строя (выходы с ненулевым значением) вам нужно ||
не &&
.
cmd1 && cmd2
будет работать, когда cmd2
cmd1
успешно (значение выхода 0
). Где, как
cmd1 || cmd2
будет работать cmd2
, когда cmd1
терпит неудачу (выход ненулевое значение).
Использование ()
делает команду в них работать в подоболочку и вызов exit
оттуда приводит к выходу из подоболочки, а не оригинал оболочки, следовательно, выполнение продолжается в исходной оболочке.
Чтобы преодолеть это использование { }
Последние два изменения требуются Баш.
Вы предполагали, что незакрытая цитата является синтаксической ошибкой, которая приведет к сбою/выходу? если нет, вы должны закрыть цитату в своем примере. – hobs