Script Bash - Umount um dispositivo, mas não falhe se não estiver montado?
Pergunta
Estou escrevendo um script de bash e tenho errexit
Definir, para que o script morrer se algum comando não retornar um código de saída 0, ou seja, se algum comando não concluir com êxito. Isso é para garantir que meu script bash seja robusto.
Eu tenho que montar alguns sistemas de arquivos, copiar alguns arquivos, o OMOUNT. Estou colocando um umount /mnt/temp
No começo, para que isso onda antes de fazer qualquer coisa. No entanto, se não estiver montado, o Umount falhará e interromperá meu script.
É possível fazer um umount --dont-fail-if-not-mounted /mnt/temp
? Para que ele retorne 0 se o dispositivo não estiver montado? Curti rm -f
?
Solução
O truque padrão para ignorar o código de retorno é envolver o comando em uma expressão booleana que sempre avalia o sucesso:
umount .... || /bin/true
Outras dicas
Assumindo que você umount
Retorna 1 Quando o dispositivo não está montado, você pode fazer assim:
umount … || [ $? -eq 1 ]
Então Bash não assumirá nenhum erro se umount
Retorna 0 ou 1 (ou seja, desmontagens com sucesso ou dispositivo não está montado), mas interromperá o script se algum outro código for retornado (por exemplo, você não terá permissões para desmontar o dispositivo).
Acabei de encontrar o ":" mais usar e queria uma solução semelhante, mas informe o script o que está acontecendo.
umount ...... || { echo "umount failed but not to worry" ; : ; }
Isso retorna verdadeiro com a mensagem, embora a OMOUNT falhasse.