Bash Script – размонтировать устройство, но не произойдет сбой, если оно не смонтировано?

StackOverflow https://stackoverflow.com/questions/1378331

Вопрос

Я пишу bash-скрипт, и у меня есть errexit установлено, так что скрипт завершится, если какая-либо команда не вернет код выхода 0, т.е.если какая-либо команда не выполнена успешно.Это делается для того, чтобы убедиться, что мой bash-скрипт надежен.

Мне нужно смонтировать некоторые файловые системы, скопировать некоторые файлы и размонтировать их.я ставлю umount /mnt/temp в начале, чтобы он размонтировал его, прежде чем что-либо делать.Однако, если он не смонтирован, umount завершится неудачно и мой скрипт остановится.

Можно ли сделать umount --dont-fail-if-not-mounted /mnt/temp?Чтобы он возвращал 0, если устройство не смонтировано?Нравиться rm -f?

Это было полезно?

Решение

Стандартный способ игнорировать код возврата — обернуть команду логическим выражением, которое всегда приводит к успеху:

umount .... || /bin/true

Другие советы

Предполагая, что ваш umount возвращает 1, когда устройство не смонтировано, вы можете сделать это так:

umount … || [ $? -eq 1 ]

Тогда bash не будет считать ошибки, если umount возвращает 0 или 1 (т.е.успешно размонтируется или устройство не смонтировано), но остановит выполнение сценария, если будет возвращен какой-либо другой код (например,у вас нет прав на отмонтирование устройства).

Я просто нашел ":" более полезным и захотел похожее решение, но дал понять сценарию, что происходит.

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

Это возвращает true вместе с сообщением, хотя размонтирование не удалось.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top