Bash Scripts - umount un dispositivo, pero no fallan si no está montado?
Pregunta
Estoy escribiendo un script bash y tengo errexit
conjunto, por lo que el guión va a morir si cualquier comando no devuelve un código de salida de 0, es decir, si cualquier comando no se completa correctamente. Esto es para asegurarse de que mi escritura del golpe es robusto.
Tengo que montar algunos sistemas de archivos, copiar algunos archivos a través de, al desmontarlo. Estoy poniendo un umount /mnt/temp
al comienzo por lo que va a desmontarlo antes de hacer nada. Sin embargo, si no se monta entonces desmontaje fallará y detener mi guión.
¿Es posible hacer un umount --dont-fail-if-not-mounted /mnt/temp
? De modo que devolverá 0 si el dispositivo no está montado? Al igual que rm -f
?
Solución
El truco estándar para ignorar el código de retorno es envolver el comando en una expresión lógica que da siempre como resultado el éxito:
umount .... || /bin/true
Otros consejos
Si se asume que su umount
devuelve 1 cuando el dispositivo no está montado, puede hacerlo así:
umount … || [ $? -eq 1 ]
Entonces golpe no asumirá error si umount
devuelve 0 o 1 (es decir desmonta con éxito o el dispositivo no está montado), pero se detendrá la secuencia de comandos si se devuelve cualquier otro código (por ejemplo, usted no tiene permisos para desmontar el dispositivo).
acabo de encontrar el ":" Un mayor uso ful y quería una solución similar, pero dejar que el guión sé qué está sucediendo.
umount ...... || { echo "umount failed but not to worry" ; : ; }
Esto devuelve cierto con el mensaje, aunque el umount falló.