проверка bash на предмет сбоя пользовательского монтирования

StackOverflow https://stackoverflow.com/questions/880330

  •  22-08-2019
  •  | 
  •  

Вопрос

Я пишу скрипт для передачи некоторых файлов через sftp.Я хотел выполнить передачу как локальную передачу, смонтировав каталог с помощью sshfs, потому что это значительно упрощает создание требуемой структуры каталогов.Проблема, с которой я столкнулся, заключается в том, что я не уверен, как справиться с ситуацией отсутствия сетевого подключения.По сути, мне нужен способ определить, не удалась ли команда sshfs.Есть какие-нибудь идеи, как заставить скрипт отключиться, если удаленный каталог не может быть смонтирован?

Это было полезно?

Решение

Просто проверьте, действительно ли sshfs возвращает 0 (успех):

sshfs user@host:dir mountpoint || exit 1

Вышесказанное работает, потому что в bash логический-или || выполняет оценка короткого замыкания.Более приятным решением, которое позволяет вам напечатать сообщение об ошибке, является следующее:

if !( sshfs user@host:dir mountpoint ); then
  echo "Mounting failed!"
  exit 1
fi

Редактировать:

Я бы отметил, что именно так вы проверяете успешность практически любого хорошо работающего приложения на большинстве платформ.– Спарр 1 минуту назад

Действительно.Чтобы уточнить немного больше:большинство приложений возвращают 0 при успешном выполнении и другое значение при сбое.Оболочка знает это и, таким образом, интерпретирует возвращаемое значение 0 как true, а любое другое значение - как false.Отсюда логическое-или и отрицательный тест (с использованием восклицательного знака).

Другие советы

Я пытался проверить, не является ли каталог точкой монтирования для sshfs монтируйся.Использование приведенного выше примера не удалось:

if !( mountpoint -q /my/dir ); then
    echo "/my/dir is not a mountpoint"
else
    echo "/my/dir is a mountpoint"
fi

Ошибка: -bash: !( mountpoint -q /my/dir ): No such file or directory

Я внес в свой код следующие изменения и добился успеха:

if (! mountpoint -q /my/dir ); then
    echo "/my/dir is not a mountpoint"
else
    echo "/my/dir is a mountpoint"
fi
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top