Если umount
возвращает 0 в качестве кода выхода, этот сценарий продолжается. Иногда код выхода 127, я в порядке, и сценарий должен продолжаться. Как я могу изменить скрипт, чтобы сделать такой «белый список» разрешенных размонтированных кодов выхода?
set -e
sudo umount /drive || [ $? -eq 0 ]
echo do stuff
Если такая техника существует, у меня есть много вариантов ее использования.
Давайте попробуем это:
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
'
Этот ответ в комментарии Гленна Джекмана работает для меня:
mycmd || [ $? -eq 127 ] || exit
Вы можете использовать оператор case, чтобы внести белый список или выполнить другое действие.
sudo umount /drive
case $? in
0)
;;
127)
;;
*)
echo 'bailing!'
exit 1
;;
esac
echo 'doing more stuff'