Получить имя пользователя текущего пользователя в bash?

Я пишу программу в bash, которая должна получить имя пользователя пользователя.

Я слышал о том, что называется whoami, но я понятия не имею, что он делает или как его использовать.

Какую команду я могу использовать для получения текущего имени пользователя?

Ответ 1

В командной строке введите

echo "$USER"

или же

whoami

Чтобы сохранить эти значения в переменной, выполните

myvariable=$(whoami)

или же

myvariable=$USER

Конечно, вам не нужно создавать переменную, поскольку для этого и используется переменная $USER.

Ответ 2

альтернативой whoami является id -u -n.

id -u вернет идентификатор пользователя (например, 0 для root).

Ответ 3

Взломайте, что я использовал в Solaris 9 и Linux, и который отлично работает для них обоих:

ps -o user= -p $$ | awk '{print $1}'

Этот фрагмент печатает имя пользователя с текущей EUID.

ПРИМЕЧАНИЕ: вам понадобится bash в качестве интерпретатора.

В Solaris у вас есть проблемы с методами, описанными выше:

  • id не принимает параметры -u и -n (так что вам придется разобрать вывод)
  • whoami не существует (по умолчанию)
  • who am I печатает владельца текущего терминала (игнорирует EUID)
  • $USER переменная устанавливается правильно только после чтения файлов профиля (например, /etc/profile)

Ответ 4

Две команды:

  • id печатает идентификатор пользователя вместе с группами. Формат: uid=usernumber(username) ...

  • whoami дает текущее имя пользователя

Ответ 5

Используйте стандартную команду Unix/Linux/BSD/MacOS logname для извлечения зарегистрированного пользователя. Это игнорирует окружающую среду, а также судо, поскольку это ненадежные журналисты. Он всегда будет печатать зарегистрированное имя пользователя и затем выйти. Эта команда существует примерно с 1981 года.

My-Mac:~ devin$ logname
devin
My-Mac:~ devin$ sudo logname
Password:
devin
My-Mac:~ devin$ sudo su -
My-Mac:~ root# logname
devin
My-Mac:~ root# echo $USER
root

Ответ 6

Для bash/ksh/sh и т.д. На многие из ваших вопросов быстро отвечает:

man [function]

чтобы получить документацию для используемой системы.

или обычно более удобно: google "функция человека" Это может дать разные результаты для некоторых вещей, где linux и unix имеют скромные отличия.

По этому вопросу, просто введите "whoami" в свою оболочку.

В script он:

myvar=$(whoami)

Ответ 7

Если требуются права root (sudo), которые обычно используются на 90% + при использовании сценариев, указанные выше методы всегда дают вам root в качестве ответа.

Чтобы получить текущего "зарегистрированного" пользователя так же просто, но требует доступа к различным переменным: $SUDO_UID и $SUDO_USER.

Они могут быть эхом:

echo $SUDO_UID
echo $SUDO_USER

или назначен, например:

myuid=$SUDO_UID
myuname=$SUDO_USER

Ответ 8

В Solaris OS- я использовал эту команду.

$ who am i     # remember to use it with space.

На Linux- кто-то уже ответил на это в комментариях.

$ whoami       # without space

Ответ 9

В большинстве систем Linux простой ввод whoami в командной строке предоставляет идентификатор пользователя.

Однако в Solaris вам может потребоваться определить идентификатор пользователя, определив UID пользователя, вошедшего в систему с помощью приведенной ниже команды.

echo $UID

Как только UID известен, найдите пользователя, сопоставив UID с /etc/passwd.

cat /etc/passwd | cut -d":" -f1,3

Ответ 10

Текущее имя пользователя может быть получено в чистом Bash с расширением параметра ${[email protected]} (введено в Bash 4.4):

$ : \\u
$ printf '%s\n' "${[email protected]}"

: Встроенный (синоним true) используется вместо временной переменной, установив последний аргумент, который хранится в $_. Затем мы расширяем его (\u), как если бы это была строка подсказки с оператором P

Это лучше, чем использование $USER, поскольку $USER - это просто обычная переменная среды; его можно изменить, сбросить и т.д. Даже если он не был намеренно подделан, распространенным случаем, когда он по-прежнему неверен, является переключение пользователя без запуска оболочки входа (su default).

Ответ 11

Получить текущую задачу user_struct

#define get_current_user()              \
({                                      \
    struct user_struct *__u;            \
    const struct cred *__cred;          \
    __cred = current_cred();            \
    __u = get_uid(__cred->user);        \
    __u;                                \
})