2016-11-15 29 views
1

У меня есть программа, которая проверяет код ошибки для скрипта/команды, которую я предоставляю. В некоторых случаях командная строка возвращает код ошибки предупреждения, который я хотел бы игнорировать (выход с 0 вместо 5). Я бы хотел, чтобы другие коды ошибок проходили одинаково, и для этого было максимально простым (чтобы сохранить одну команду).bash игнорировать специфический код ошибки (pytest no tests warning error code 5)

Я пробовал использовать pytest || [ $? -eq 5 ], который игнорирует код ошибки 5, поступающий из команды, но заменит все ненулевые коды ошибок на 1 (вместо фактического кода ошибки).

Я думаю, кто-то более опытный, чем я с Баш мог придумать лучшего решения быстрее, чем я

Некоторые более конкретном контексте:

Я использую pytest, чтобы проверить мои проекты. Некоторые из них в настоящий момент не имеют тестов, а поведение по умолчанию pytest - рассматривать это как ошибку (код ошибки 5). Я хотел бы считать эту ошибку успешной. На самом деле, я бы хотел, чтобы Тревис угрожал этой ошибкой как успех.

Спасибо!

ответ

2

Используя арифметическое выражение:

exit $(($? == 5 ? 0 : $?)) 
2

Вам просто нужно поймать, проверить и (повторно) поднять соответствующий статус.

command 
case $? in 
    5) exit 0 ;; 
    *) exit ;; 
esac 
0

я в конечном итоге делает следующее:

pytest ... ; err=$? ; if (($err != 5)) ; then exit $err ; fi 

Потому что по какой-то причине ответ Руслана уже отводящей вопросы, когда Трэвис выполнил его, и chepner Ответим кажется не так чисто.