Сопоставьте некоторые коды возврата с нулем (успех) в bash

#bash

#bash

Вопрос:

У меня есть сценарий оболочки, который возвращает кучу разных кодов ошибок. Некоторые из них безобидны, и я хочу рассматривать их как успех, а затем использовать amp;amp; для запуска другой команды (т.Е. Все в той же команде списка). Есть ли способ сделать это?

Например:

cmd1 amp;amp; cmd2;

cmd1 возвращает 0 при успехе, 1 при безобидной ошибке и 2 при реальной ошибке. Я хочу, чтобы команда продолжала выполняться с 0 или 1.

Комментарии:

1. Не могли бы вы показать нам какой-нибудь код, пожалуйста?

2. Конечно, только что добавлен пример кода. Спасибо.

3.Вам нужно будет выполнить cmd1 , а затем выполнить, cmd2 если код возврата равен 0 или 1. Чтобы уточнить, здесь, вероятно, нет короткого пути, чтобы иметь возможность использовать короткое замыкание.

4. @devnull О, я подумал, может быть, есть какой-то оператор фильтра / маски, о котором я не знал.

Ответ №1:

Вы можете сделать это таким образом

 cmd1; (( $? < 2 )) amp;amp; cmd2
  

Комментарии:

1. Да, я это знал. Спасибо.

Ответ №2:

Вы можете использовать только amp;amp; для продолжения 0 кода возврата.

Однако вы можете прочитать код возврата и принять на его основе менее строгое решение (используя либо if или даже amp;amp; ):

 /your/command; rc=$?
[ $rc -lt 2 ] amp;amp; /your/continuation
  

Ответ №3:

Вы также можете использовать test

 cmd1; test $? -lt 2 amp;amp; cmd2