Разрешить определенным кодам выхода не прерывать выполнение в bash & ldquo; -e & rdquo; Режим

Если umount возвращает 0 в качестве кода выхода, этот сценарий продолжается. Иногда код выхода 127, я в порядке, и сценарий должен продолжаться. Как я могу изменить скрипт, чтобы сделать такой «белый список» разрешенных размонтированных кодов выхода?

set -e
sudo umount /drive || [ $? -eq 0 ] 
echo do stuff

Если такая техника существует, у меня есть много вариантов ее использования.

1
задан 17 January 2018 в 04:00

3 ответа

Давайте попробуем это:

if sudo mount /drive; then
    : # exit status 0
else
    rc=$?
    [ $rc -ne 127 ] && exit $rc
fi

Тест с этим - эксперимент с различными значениями для status

env status=0 bash -e -c '
    mycmd() { return $1; }
    if mycmd $status; then
        :
    else
        rc=$?
        [ $rc -ne 127 ] && exit $rc
    fi
    echo OK
'
1
ответ дан 17 January 2018 в 04:00

Этот ответ в комментарии Гленна Джекмана работает для меня:

mycmd || [ $? -eq 127 ] || exit
-1
ответ дан 17 January 2018 в 04:00

Вы можете использовать оператор case, чтобы внести белый список или выполнить другое действие.

sudo umount /drive

case $? in
        0)
                ;;
        127)
                ;;
        *)
                echo 'bailing!'
                exit 1
                ;;
esac

echo 'doing more stuff'
1
ответ дан 17 January 2018 в 04:00

Другие вопросы по тегам:

Похожие вопросы: