Bash Script - убрать устройство, но не сработает, если он не установлен?

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

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

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

Ответ 1

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

umount .... || /bin/true

Ответ 2

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

umount … || [ $? -eq 1 ]

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

Ответ 3

Я только что нашел ":" больше пользы и хотел аналогичное решение, но пусть script знает, что происходит.

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

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