Как сказал огуз исмаил, это результат !
- поскольку он преобразует статус отказа в успех, и есть только один возможный статус успеха (ноль), он обязательно теряет указанный код c отказа. Но вы можете сделать эквивалент этого без использования !
:
set -e
some_command || {
RET=$?
if [[ $RET == 255 ]]; then
...do something handling...
fi
}
В отличие от решения PIPESTATUS
, это переносимо на оболочки, отличные от bash (оно должно работать с любой оболочкой POSIX). (Хотя, как указал огуз исмаил, условное выражение [[ ]]
не переносимо - переносимая версия будет if [ "$RET" = 255 ]; then
.)