4

Я впервые пытаюсь написать длинный скрипт bash для управления сервером, который я запускаю, и при использовании «set -ex» сценарий завершается, когда происходит сбой umount. Я думал, что мой оператор if поймает его, но сценарий завершится до того, как сработает echo.

Что я здесь пропускаю?

umount $MOUNTPATH
if [[ $? -ne 0 ]];
then
  /bin/echo "Failed to unmount!  Already unmounted?"
fi

2 ответа2

4

Команда set -e завершит работу оболочки после сбоя команды. То есть, как только команда unmount завершит свою работу. if не может поймать его, так как скрипт завершает работу до того, как он попадет в if . Вы можете исправить это, поместив команду unmount в условие if (отрицается с ! чтобы заставить его выполнить предложение then случае сбоя размонтирования, а не в случае успеха):

if ! unmount $MOUNTPATH; then
    /bin/echo "Failed to unmount!  Already unmounted?"
fi
1

Проблема в том, что у вас есть точка с запятой после вашего оператора if.

umount $MOUNTPATH
if [[ $? -ne 0 ]]
then
  /bin/echo "Failed to unmount!  Already unmounted?"
fi

Это должно исправить это.

Источники: http://bash.cyberciti.biz/guide/If_structures_to_execute_code_based_on_a_condition

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .