Bash Script - umount un dispositivo, ma non fallire se non è montato?
Domanda
Sto scrivendo uno script bash e ho impostato errexit
, in modo che lo script morirà se qualsiasi comando non restituisce un codice di uscita 0, vale a dire se qualsiasi comando non viene completata correttamente. Questo per fare in modo che il mio script bash è robusto.
devo montare alcuni file system, copiare alcuni file sopra, l'umount esso. Sto mettendo un umount /mnt/temp
alla partenza in modo che sarà umount prima di fare qualsiasi cosa. Tuttavia, se non è montato poi umount fallirà e fermare il mio script.
E 'possibile fare un umount --dont-fail-if-not-mounted /mnt/temp
? Così che restituisca 0 se il dispositivo non è montato? Come rm -f
?
Soluzione
Il trucco standard per ignorare il codice di ritorno è quello di avvolgere il comando in un'espressione booleana che restituisce sempre il successo:
umount .... || /bin/true
Altri suggerimenti
Supponendo che il vostro umount
restituisce 1 quando il dispositivo non è montato, si può fare in quel modo:
umount … || [ $? -eq 1 ]
Poi bash non si assume alcuna errore se umount
ritorna 0 o 1 (cioè smonta con successo o il dispositivo non è montato), ma si arresta lo script se viene restituito qualsiasi altro codice (ad esempio, non hai i permessi per smontare il dispositivo).
Ho appena trovato il ":" più Funzioni utili e volevamo una soluzione simile, ma lasciare che lo script so che cosa sta accadendo.
umount ...... || { echo "umount failed but not to worry" ; : ; }
Questo restituisce true con il messaggio, anche se l'umount non riuscita.