Могу ли я получить доступ к исходной переменной $ 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

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

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.