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



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



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



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

774   10  

10 ответов:

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

echo $USER

или

whoami

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

myvariable=$(whoami)

или

myvariable=$USER

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

альтернатива whoami и id -u -n.

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

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

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

этот фрагмент выводит имя пользователя с текущим EUID.

Примечание: вам нужен баш в качестве переводчика здесь.

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

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

две команды:

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

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

используйте стандартную команду 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

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

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

им можно вторить:

echo $SUDO_UID
echo $SUDO_USER

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

myuid=$SUDO_UID
myuname=$SUDO_USER

на bash/ksh/sh etc. На многие Ваши вопросы быстро отвечают либо:

man [function]

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

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

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

в скрипт:

myvar=$(whoami)

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

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

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

$ whoami       # without space

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

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

echo $UID

после того, как жидкость известно, найти пользователя путем сопоставления жидкость против файле /etc/passwd и.

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

получить user_struct текущей задачи

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

Comments

    Ничего не найдено.