Ответ 1
Стандартный трюк, чтобы игнорировать код возврата, заключается в том, чтобы обернуть команду в булево выражение, которое всегда оценивает успех:
umount .... || /bin/true
Я пишу 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
?
Стандартный трюк, чтобы игнорировать код возврата, заключается в том, чтобы обернуть команду в булево выражение, которое всегда оценивает успех:
umount .... || /bin/true
Предполагая, что ваш umount
возвращает 1, когда устройство не смонтировано, вы можете сделать это следующим образом:
umount … || [ $? -eq 1 ]
Тогда bash не будет принимать никаких ошибок, если umount
возвращает 0 или 1 (то есть отключается успешно или устройство не монтируется), но останавливает script, если возвращается какой-либо другой код (например, у вас нет разрешений на отключите устройство).
Я только что нашел ":" больше пользы и хотел аналогичное решение, но пусть script знает, что происходит.
umount ...... || { echo "umount failed but not to worry" ; : ; }
Это возвращает true с сообщением, хотя ошибка umount не удалась.