Frage

Ich bin ein Bash-Skript zu schreiben, und ich habe errexit gesetzt, so dass das Skript sterben wird, wenn ein Befehl nicht ein 0 Exit-Code zurückgibt, das heißt, wenn ein Befehl nicht erfolgreich abgeschlossen wird. Dies ist, um sicherzustellen, dass mein Bash-Skript ist robust.

Ich habe einige Dateisysteme zu montieren, kopieren einige Dateien über das umount es. Ich bin ein umount /mnt/temp am Anfang setzen, so dass sie es vor etwas zu tun umount werden. Aber wenn es dann nicht angebracht umount wird fehlschlagen und mein Skript stoppen.

Ist es möglich, eine umount --dont-fail-if-not-mounted /mnt/temp zu tun? So dass es 0 zurückgeben, wenn das Gerät nicht angebracht ist? Wie rm -f?

War es hilfreich?

Lösung

Der Standard-Trick des Return-Code zu ignorieren den Befehl in einem Booleschen Ausdruck wickeln, dass immer zum Erfolg wertet:

umount .... || /bin/true

Andere Tipps

Unter der Annahme, dass Ihr umount gibt 1 zurück, wenn das Gerät nicht montiert ist, man es so tun können:

umount … || [ $? -eq 1 ]

Dann wird bash keinen Fehler übernehmen, wenn umount liefert 0 oder 1 (dh Aushänge erfolgreich oder Gerät nicht montiert ist), sondern wird das Skript zu stoppen, wenn ein anderer Code zurückgegeben wird (zB Sie haben keine Berechtigungen das Gerät zu trennen).

Ich habe gerade die „:“ mehr verwenden ful und wollte eine ähnliche Lösung, aber lassen Sie das Skript wissen, was passiert.

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

Diese gibt true zurück mit der Nachricht, obwohl die umount fehlgeschlagen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top