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