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?

È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top