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?

¿Fue útil?

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ó.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top