Question

J'écris un script bash et j'ai mis de errexit, de sorte que le script va mourir si une commande ne retourne pas 0 code de sortie, à savoir si une commande ne se termine pas avec succès. Ceci est pour vous assurer que mon script bash est robuste.

Je dois monter des systèmes de fichiers, copier des fichiers sur le umount il. Je mets un umount /mnt/temp au début afin que ça va umount avant de faire quoi que ce soit. Toutefois, si ce n'est pas monté alors umount échoue et arrêter mon script.

Est-il possible de faire une umount --dont-fail-if-not-mounted /mnt/temp? Alors qu'il retourne 0 si l'appareil est pas monté? Comme rm -f?

Était-ce utile?

La solution

L'astuce standard pour ignorer le code de retour est d'envelopper la commande dans une expression booléenne qui évalue toujours le succès:

umount .... || /bin/true

Autres conseils

En supposant que votre umount renvoie 1 lorsque l'appareil est pas monté vous pouvez faire comme ça:

umount … || [ $? -eq 1 ]

bash prendra aucune erreur si retourne umount 0 ou 1 (c.-à-démontages avec succès ou un dispositif n'est pas monté) mais arrêtera le script si tout autre code est retourné (par exemple, vous avez aucune autorisation pour désinstaller le périphérique).

Je viens de découvrir le « : » plus utiliser FUL et je voulais une solution similaire, mais nous allons le script savoir ce qui se passe.

umount ...... || { echo "umount failed but not to worry" ; : ; } 

Ceci retourne vrai avec le message, bien que le umount a échoué.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top