Я сделал несколько тестов. Мне (пока) не совсем понятно, как sudo
кешируется способность человека повышаться. Возможно, это как-то связано с выделением псевдотерминала или нет.
На вашем месте я бы реализовал то, что вы можете прочитать в этом вопросе: Как мне запустить sudo
команду внутри скрипта? Особенно из одного из ответов :
Редко хорошая идея иметь
sudo
внутри скрипты. Вместо этого удалитеsudo
из скрипта и запустите сам скрипт сsudo
за исключением вашего случая, о котором gsudo
мы говорим. Дополнительно я бы использовал $SUDO_USER
при необходимости (из этого другого ответа ).
Пример run-something
:
#!/path/to/my/gsudo /bin/bash # The shebang ensures the below code is for sure run with gsudo bash; # gsudo runs sudo, which sets $SUDO_USER (see `man sudo'). command1 # This is run with gsudo because the entire script is. # Get back to the invoking (possibly regular) user for just one command sudo -u "$SUDO_USER" command_whatever # Again as root command2 command3 # Get back to the invoking user for many commands sudo -u "$SUDO_USER" bash << EOF foo bar baz EOF
Мой gsudo
был бы очень прост:
#!/bin/bash SUDO_ASKPASS='/path/to/my/gsudo_helper' sudo "$@"
И gsudo_helper
:
#!/bin/bash zenity --password --title "Enter your password" 2> /dev/null
Заметки:
- Я сознательно не использую
sudo -A
вgsudo
коде. Этот способgsudo
использует терминал, если он доступен, вzenity
противном случае. - Синтаксис
sudo "$@"
позволяетgsudo
передавать параметры командной строки (например, упомянутые выше-A
) вsudo
. Это довольно хорошая идея, но если вы не хотите этого, то подумайтеsudo -- "$@"
.