Могу ли я получить доступ к исходной переменной $ USER из скрипта, запущенного с `sudo`?

19

Странный вопрос, я знаю. Вот сценарий:

echo $USER

Вот команда, которую я использую для запуска:

sudo ./myscript.sh

Прямо сейчас это печатает "root", но я хочу, чтобы это напечатало jon, мое имя пользователя. Есть ли способ сделать это, изменив сценарий, а не команду?

Джонатан
источник
Да, есть способы сделать это. Но, возможно, самый простой способ - это обходной путь. Вызовите этот сценарий из другого сценария, где вы «сохраните» свой идентификатор пользователя, чтобы «сценарий sudo» мог получить к нему доступ.
Судод

Ответы:

28

Используйте SUDO_USERпеременную окружения вместо USER.

sudoпомещает имя пользователя, запустившего его, в SUDO_USERпеременную окружения:

ek@Io:~$ sudo sh -c 'echo $USER'
[sudo] password for ek:
root
ek@Io:~$ sudo sh -c 'echo $SUDO_USER'
ek

Таким образом , вы можете просто заменить $USERс $SUDO_USERв сценарии:

echo $SUDO_USER

Дальнейшее чтение

Элия ​​Каган
источник