Подтвердить что ты не робот

Загрузите домашнюю директорию пользователей, когда они запускают script как root

У меня есть sh script, который должен быть запущен как root, однако он запускается конечным пользователем, используя sudo. Как я могу получить домашний каталог пользователей, когда ~/указывает на /root при запуске с помощью sudo?

4b9b3361

Ответ 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).