Получить имя пользователя текущего пользователя в 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
Две команды:
Ответ 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; \
})