Это будет состоять из двух частей: обнаружение кода ошибки 3 и превращение нуля в другое
Одно из возможных решений будет следующим:
mycommand && false || [ $? -eq 3 ]
Первый оператор &&
поворачиваетНулевой код выхода до 1 (с false
- изменить на что-то другое, если 1 следует считать «хорошим»), а затем с помощью теста изменить «хороший код выхода» на 3.
Проще,более простой в обслуживании способ - использовать подоболочку:
( mycommand; [ $? -eq 3 ] )
Эта подоболочка будет нормально запускать mycommand
, а ее код выхода будет кодом последней подкоманды.Просто убедитесь, что вы не shopt -s inherit_errexit
разрушите это:)