Этот ответ похож на ответ terdon . Поскольку я также предложил бы запустить основной скрипт с sudo
, чтобы вы могли запускать команды, не спрашивая у пользователя пароль.
Однако, если вы хотите запустить некоторые из команд не как пользователь root или конкретный системный пользователь, а как фактический пользователь, который выполнил команду с sudo
, вы можете проверить переменную $SUDO_USER
на выяснить оригинального пользователя.
Это пример сценария того, как вы могли бы достичь этого:
#!/bin/bash
# ref: https://askubuntu.com/a/30157/8698
if ! [ $(id -u) = 0 ]; then
echo "The script need to be run as root." >&2
exit 1
fi
if [ $SUDO_USER ]; then
real_user=$SUDO_USER
else
real_user=$(whoami)
fi
# Commands that you don't want run with root would be invoked
# with: sudo -u $real_user
# So they will be ran as the user who invoked the sudo command
# Keep in mind, if the user is using a root shell (they're logged in as root),
# then $real_user is actually root
# sudo -u $real_user non-root-command
# Commands that need to be ran with root would be invoked without sudo
# root-command