Вы не можете rmdir
каталог, который не пуст или является точкой монтирования. Так что это удовлетворит ваше требование:
rm -f mountpoint/.autodiskmounted # MacOS cookie
rmdir mountpoint 2>/dev/null
Если вы работаете в сценарии с установленным выходом при ошибке , вы можете использовать rmdir... || true
. (Обратите внимание, что от --ignore-fail-on-non-empty
мало толку, потому что мы получим необработанную ошибку при попытке удалить точку монтирования.)
Должен отметить, что у меня нет доступа к системе Mac, поэтому я не могу проверить, присутствует ли файл .autodiskmounted
, когда файловая система действительно смонтирована, или он является заполнителем, когда файловая система размонтирована.
Вы используете оболочку, а не конвейер. Обертки будут нести свои разрешения с собой.
В данном случае из соображений безопасности используйте
sudo watch dmesg
вместо
watch sudo dmesg
, чтобы активировать аутентификацию sudo
только один раз. В противном случае он будет постоянно обновлять вашу аутентификацию, так как sudo
запускается каждую секунду. Если вы затем отойдете, и кто-то подойдет и ^C
выполнит вашу команду, он сможет немедленно sudo
что-то еще, независимо от того, сколько времени прошло с тех пор, как вы нажали Enter для этой команды.
В общем, каждая команда, которой требуется повышение прав, требуетsudo
:
sudo command1 | sudo command2
В случае с оболочкой повышение уровня процесса приведет к повышению прав любых новых процессов, порожденных этим процессом. Единственным исключением являются вещи, которые автоматически запускаются от имени другого пользователя без полномочий root. Например, сервисы, которые работают под своим пользователем.
Если у вас есть несколько команд, которые передаются друг другу, и все они требуют повышения прав, обычно их можно увидеть в оболочке bash sub -с повышенными правами:
sudo bash -c "command1 | command2"