В верхней части .bashrc
поставить:
unset BASH_ENV
Если .bashrc
уже используется для настройки среды, нет необходимости в будущих вызовах bash
для повторной настройки среды.
Возможность :запустить скрипт с sudo myscript.sh
. Внутри скрипта запускаются команды, которые должны запускаться без sudo
таким образом:
sudo -u "$SUDO_USER" foo args
(возможно, с правильной логикой на случай, если весь скрипт когда-либо будет запущен безsudo
). Пользователю root не нужно проходить аутентификацию для sudo
, и поэтому не требуется вводить пароль для запуска команды от имени другого пользователя .
В зависимости от того, насколько велик сценарий (, насколько сильно вам нужно его изменить )и как вы относитесь к запуску всего этого с помощью sudo
, вам может понравиться или не понравиться эта идея. В вашем текущем подходе не -повышенный код является кодом по умолчанию, строки с sudo
являются явными исключениями. Мой подход переворачивает это с ног на голову. Вы должны быть более осторожными при создании и тестировании скрипта. Я признаю, что это не лучшая практика; тем не менее это решает проблему истечения sudo
.
Лично я бы использовал это решение для долго работающего скрипта, который не слишком сложен (простой цикл, несколько команд ). Я бы дважды подумал, прежде чем перестраивать сложный скрипт.
Другой подход заключается в периодическом обновлении кэшированных учетных данных в фоновом режиме. По умолчанию они указаны для терминала (, см. tty_tickets
). Действуйте так:
sudo -v # to enter your password once
while sleep 300; do sudo -v; done & # adjust the interval if needed
myscript.sh
Не забудьте закрыть фоновое задание, когда оно больше не нужно. Скрипт сам может запустить такое задание; тогда вы, вероятно, захотите, чтобы некоторые ловушки в сценарии автоматически убивали задание, когда сценарий завершается.