Bash-Skript - umount ein Gerät, aber nicht scheitern, wenn es nicht angebracht?
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
?
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.