Кроме того, будут ли эти переменные всегда соответствовать текущему имени пользователя, вошедшего в систему (они соответствуют моей системе Debian)? Могу ли я предположить их доступность в других Unix-подобных системах?
Мне также любопытно, почему можно было бы whoami
вместо того, чтобы просто читать любую из этих переменных.
USER
и USERNAME
являются обычными переменными среды, что означает, что, если вы хотите, вы можете установить для них произвольные значения Просто введите USER=xyz
. Другими словами, даже если эти переменные существуют, нет гарантии, что их значения соответствуют текущему зарегистрированному имени пользователя.
guarantee
, я имел в виду по умолчанию (т.е. предполагая, что пользователь не изменил их).
sudo whoami
иsudo echo $USER
sudo echo $USER
оболочка расширяется $USER
, затем вызывает sudo
. Так что, конечно, он не выдает такой же результат, как whoami
. Как sudo whoami
, sudo sh -c 'echo $USER'
делает (обычно) выход root
. Что касается вашего комментария об whoami
использовании EUID , обратите внимание, что sudo whoami
будет выводиться, root
даже если whoami
используется UID. sudo
наборы как EUID и UID для команды он работает ( за исключением очень необычной ситуации , что вы явно настроить его вести себя иначе). Сравните sudo id -u
с sudo id -ru
.
man
страницу,whoami
выдает имя, связанное с вашим эффективным идентификатором пользователя. Это означает, что он вернет что-то другое, если вы используетеsudo
или запускаете исполняемый файл setuid. Если выsudo
настроили, попробуйте,sudo whoami
например.