У меня есть sh script, который должен быть запущен как root, однако он запускается конечным пользователем, используя sudo. Как я могу получить домашний каталог пользователей, когда ~/указывает на /root при запуске с помощью sudo?
Загрузите домашнюю директорию пользователей, когда они запускают script как root
Ответ 1
Домашний каталог пользователя будет ~$SUDO_USER
. Вы можете использовать eval
следующим образом:
USER_HOME=$(eval echo ~${SUDO_USER})
echo ${USER_HOME}
Ответ 2
Старайтесь избегать eval. Особенно с корнями.
Вы можете сделать:
USER_HOME=$(getent passwd $SUDO_USER | cut -d: -f6)
Update:
здесь, поэтому, чтобы избежать eval.
Ответ 3
$ sudo env |grep USER
USER=root
USERNAME=root
SUDO_USER=glglgl
Итак, вы можете получить доступ к $SUDO_USER
и запросить систему для своего homedir с getent passwd $SUDO_USER | cut -d: -f6
.
Ответ 4
Попробуйте получить доступ к переменной окружения $SUDO_USER
Ответ 5
Если я не понял вопрос, когда пользователь запускает script с sudo, переменная среды $HOME
не изменяется. Чтобы проверить, я создал этот script:
#!/bin/bash
#sudo_user.sh
env | grep -e USER -e HOME
... и запустите его:
sudo ./sudo_user.sh
Вывод:
USER=root
HOME=/home/haiv
USERNAME=root
SUDO_USER=haiv
Результат говорит мне, что $HOME
все еще указывает на домашний адрес пользователя (в этом случае/home/haiv).