bash проверить, не удалось ли подключить пользователя - PullRequest
3 голосов
/ 19 мая 2009

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

Ответы [ 2 ]

5 голосов
/ 19 мая 2009

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

sshfs user@host:dir mountpoint || exit 1

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

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

Edit:

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

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

2 голосов
/ 11 мая 2013

Я пытался проверить, не является ли каталог точкой монтирования для монтирования 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
...