Я пишу программу на Bash, которая должна получить имя пользователя пользователя.
Я слышал о том, что называется whoami
, но я понятия не имею, что он делает или как его использовать.
Какую команду я использую, чтобы получить текущее имя пользователя?
man whoami
обычно является хорошей первой остановкой для проверки документации.Ответы:
В командной строке введите
или
Чтобы сохранить эти значения в переменной, выполните
или
Конечно, вам не нужно создавать переменную, так как для этого и нужна
$USER
переменная.источник
$USER
не устанавливается вообще. Хуже того, это просто переменная окружения, поэтому она может быть переопределена пользователем:USER=thisisnotmyname bash -c 'echo $USER' # prints thisisnotmyname
whoami
(как вы предложили) полностью устраняет проблему, предполагая, что переопределенные переменные среды являются потенциальной проблемой в вашем контексте.Альтернатива
whoami
естьid -u -n
.id -u
вернет идентификатор пользователя (например, 0 для root ).источник
id
команда-u
и-n
флаги являются частью posix"${USER}"
иwhoami
оба зависят от того, как вы входите в систему. В частности, оболочки входа и sudo будут устанавливать $ USER иwhoami
смотреть на пользователя, подключенного к stdin. Однако, если вы запускаете пакетное задание из cron или запускаете сценарий запуска от имени другого пользователя, нежели root, то они либо выведут неправильного пользователя (root), либо вообще ничего. Этот ответ вернет правильное значение независимо от того, смотрит ли идентификатор пользователя процесса.-n
аргумент выводит имя пользователя, так же как и заданный исходный вопрос. смотрите следующее:id -u -n
отпечаткиbrett
- даже на дарвине.Используйте стандартную команду Unix / Linux / BSD / MacOS,
logname
чтобы получить зарегистрированного пользователя. Это игнорирует как окружение, так и sudo, так как это ненадежные репортеры. Он всегда будет печатать имя пользователя, вошедшего в систему, и затем выходить. Эта команда существует примерно с 1981 года.источник
Взлом, который я использовал на Solaris 9 и Linux и который прекрасно работает для них обоих:
Этот фрагмент выводит имя пользователя с текущим EUID.
ПРИМЕЧАНИЕ: вам нужен Bash в качестве переводчика.
В Solaris у вас есть проблемы с методами, описанными выше:
id
не принимает-u
и-n
параметры (так что вам придется разобрать выход)whoami
не существует (по умолчанию)who am I
печатает владельца текущего терминала (игнорирует EUID)$USER
переменная устанавливается правильно только после чтения файлов профиля (например,/etc/profile
)источник
ps
команда - это все, что нужно для отображения владельца pid текущей оболочки.command -p id
(из оболочки POSIX) или/usr/xpg4/bin/id
. В более общем случае в Solaris вы захотите изменить свою среду, чтобы поместить себя в среду POSIX (с чем-то вродеPATH=
getconf PATH` и обязательно запустите ее/usr/xpg4/bin/sh
), чтобы избежать застревания с командами 70-х / 80-х годов.Две команды:
id
печатает идентификатор пользователя вместе с группами. Формат:uid=usernumber(username) ...
whoami
дает текущее имя пользователяисточник
Когда требуются права суперпользователя (sudo), что обычно составляет более 90% при использовании сценариев, методы из предыдущих ответов всегда дают вам
root
ответ.Получить текущего «залогиненного» пользователя так же просто, но требуется доступ к различным переменным:
$SUDO_UID
и$SUDO_USER
.Они могут быть отражены:
Или назначен, например:
источник
В ОС Solaris я использовал эту команду:
На Linux - кто-то уже ответил на это в комментариях.
источник
Для Bash , KornShell (
ksh
)sh
и т. Д. На многие ваши вопросы быстро отвечают:чтобы получить документацию для системы, которую вы используете или обычно более удобно:
Google "Man Function"
Это может дать разные результаты для некоторых вещей, где Linux и Unix имеют скромные различия.
Для этого вопроса просто введите "whoami" в вашей оболочке.
Чтобы написать это:
источник
Имя пользователя текущего пользователя может быть получено в чистом Bash с
${parameter@operator}
расширением параметра (введено в Bash 4.4)::
Встроенный (синонимtrue
) используется вместо временной переменной, установив последний аргумент, который хранится в$_
. Затем мы расширяем его (\u
), как если бы это была строка приглашения сP
оператором.Это лучше, чем использовать
$USER
, так$USER
как это обычная переменная среды; его можно изменить, сбросить и т. д. Даже если он не был намеренно подделан, распространенным случаем, когда он по-прежнему неверен, является переключение пользователя без запуска оболочки входа (поsu
умолчанию).источник
В большинстве систем Linux простой ввод whoami в командной строке предоставляет идентификатор пользователя.
Однако в Solaris вам может потребоваться определить идентификатор пользователя, определив UID пользователя, вошедшего в систему с помощью приведенной ниже команды.
Как только UID известен, найдите пользователя, сопоставив UID с
/etc/passwd
файлом.источник
Получить текущую задачу user_struct
источник