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?

Foi útil?

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top