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