Я знаю странный вопрос. Вот сценарий:
echo $USER
Вот команда, которую я использую для его запуска:
sudo ./myscript.sh
Сейчас он печатает «root», но я хочу, чтобы он напечатал jon
, мое имя пользователя. Есть ли способ сделать это, изменив сценарий, а не команду?
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
man sudo
в разделе «ОКРУЖАЮЩАЯ СРЕДА»:
SUDO_USER Установите имя входа пользователя, вызвавшего sudo.
На странице руководства также описаны некоторые другие связанные переменные среды, определенные sudo
, которые могут пригодиться, например SUDO_UID
и SUDO_GID
Получение $ USER внутри сценария оболочки. при работе с sudo?
В дополнение к ответу @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 .