есть ли способ узнать исходного пользователя после sudo [duplicate]

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

echo $USER

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

sudo ./myscript.sh

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

21
задан 1 January 2017 в 07:28

2 ответа

Используйте переменную среды 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

Дополнительная литература

29
ответ дан 3 January 2021 в 23:04

В дополнение к ответу @Eliah Kagan выше , я хотел бы указать, что вы также можете легко получить расширение, которое работает и в том случае, если оно выполняется в контексте sudo или нет :

echo "${SUDO_USER:-$USER}"

По умолчанию расширяется до значения $ SUDO_USER , но если эта переменная не установлена ​​или пуста, она возвращается к значению $ USER .

$ bash -c 'echo "${SUDO_USER:-$USER}"'
bytecommander

$ sudo bash -c 'echo "${SUDO_USER:-$USER}"'
bytecommander

Дополнительную информацию о расширении параметров по умолчанию в Bash можно найти, например, на https://wiki.bash-hackers.org/syntax/pe#use_a_default_value .

0
ответ дан 3 January 2021 в 23:04

Другие вопросы по тегам:

Похожие вопросы: