В настоящее время я работаю над сценарием bash, который устанавливает и настраивает различные программы в стандартной системе Linux (в настоящее время - Ubuntu). Поскольку он устанавливает программы и копирует несколько файлов в различные папки, требующие повышенных привилегий, я уже выполнил стандартный «Мне нужны повышенные привилегии» -and-exit.
Однако я хотел бы, если возможно, иметь возможность запрашивать у пользователя пароль sudo и автоматически повышать привилегии сценария, если пользователь не запускает команду сценария с sudo (например, запускает ее из файлового менеджера GUI), без пользователя, чтобы перезапустить скрипт.
Так как он предназначен для запуска на стандартных установках Linux, любой вариант, который модифицирует систему, не будет работать для моих целей. Все параметры должны быть включены в сам скрипт.
Возможно ли это в Bash? Если так, каков наилучший (безопасный, но лаконичный) способ сделать это?
Ответы:
Я запускаю
sudo
прямо из скрипта:источник
Я предлагаю:
источник
if [[ -t 1 ]];
проверяет?Добавьте это в качестве первой строки скрипта:
Изменение
sudo
кgksu
или ,gksudo
если вы предпочитаете графическую подсказку.источник
"$*"
это объединит все аргументы в один (/path/to/script one two three
приведет к тому,$1
что они будутone two three
), и$*
без кавычек испортит пробелы в аргументах."$@"
работает правильноsudo
, это гораздо лучше, чем использоватьsu
. Но если ты действительно хочешь, наверноеexec su -c "$0" "$@"
пример сценария, которым я не против поделиться ::
--ImP.TeK
источник
[ "$UID" -eq 0 ] || exec sudo "$0" "$@"
- Похоже, действительно эффективный лайнер! Приятно!$EUDI
или всегда один и тот же результат? Например,[[ "$EUID" -eq 0 ]] || exec sudo "$0" "$@"