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

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

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

echo $USER

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

sudo ./myscript.sh

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

решение1

Используйте 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

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

решение2

В дополнение кОтвет @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.

Связанный контент