Странный вопрос, я знаю. Вот сценарий:
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
Дальнейшее чтение
man sudo
, в разделе «ОКРУЖАЮЩАЯ СРЕДА»:SUDO_USER Set to the login name of the user who invoked sudo.
На странице руководства также описаны некоторые другие связанные переменные среды, определенные в файле,
sudo
которые могут оказаться полезными, напримерSUDO_UID
:SUDO_GID
решение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.