verificação do bash se montar utilizador falhar
Pergunta
Eu estou escrevendo um script para transferir alguns arquivos sobre sftp. Eu queria fazer a transferência como uma transferência de local de montagem do diretório com sshfs porque faz criar a estrutura de diretório necessário muito mais fácil. O problema que estou tendo é que eu estou inseguro sobre como lidar com a situação de não ter uma conexão de rede. Basicamente eu preciso de uma maneira de dizer se ou não os sshfs comando falhou. Alguma idéia de como fazer com que o script para a fiança se o diretório remoto não pode ser montado?
Solução
Apenas testar se sshfs
retorna 0 (sucesso):
sshfs user@host:dir mountpoint || exit 1
As obras acima porque em festa a-ou lógica ||
executa avaliação curto-circuito . Uma solução mais agradável que permite que você imprima uma mensagem de erro é o seguinte:
if !( sshfs user@host:dir mountpoint ); then
echo "Mounting failed!"
exit 1
fi
Editar:
Gostaria de salientar que esta é a forma como você verificar o sucesso da aplicação praticamente qualquer bem comportado na maioria das plataformas. - Sparr 1 min atrás
De fato. Para elaborar um pouco mais: a maioria das aplicações retornar 0 em caso de sucesso, e outro valor em caso de falha. O shell sabe disso, e, portanto, interpreta um valor de retorno de 0 como verdadeira e qualquer outro valor como falso. Daí a lógica, ou e o teste negativo (usando o ponto de exclamação).
Outras dicas
Eu estava tentando verificar se um diretório não era um ponto de montagem para uma sshfs
montar. Usando o exemplo acima falhou:
if !( mountpoint -q /my/dir ); then
echo "/my/dir is not a mountpoint"
else
echo "/my/dir is a mountpoint"
fi
O erro: -bash: !( mountpoint -q /my/dir ): No such file or directory
I alterada meu código com o seguinte e teve sucesso:
if (! mountpoint -q /my/dir ); then
echo "/my/dir is not a mountpoint"
else
echo "/my/dir is a mountpoint"
fi