проверка bash на предмет сбоя пользовательского монтирования
Вопрос
Я пишу скрипт для передачи некоторых файлов через 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