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

94

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

Лоуренс Джонстон
источник

Ответы:

197

поскольку 'whoami' устарел, его, вероятно, лучше использовать:

id -un
Кент
источник
2
В каком смысле «whoami» устарел? Кто объявил его устаревшим?
Джонатан Леффлер,
2
@Jonathan: Страница руководства whoamiпо Leopard подтверждает, что он был заменен на id.
Naaff 09
Ах! Почему они меняют то, что существовало с незапамятных времен?
dmckee --- котенок экс-модератора
29
кто сказать? <boom-chacka>
kent
27

Если вы хотите отображать полное имя (вместо имени пользователя), добавьте -Fфлаг:

$ id -F
Andrew Havens
Андрей
источник
1
-F - недопустимый параметр в Mavericks - когда это впервые начало работать?
Эли Б.
11

кто я

РЕДАКТИРОВАТЬ

Утилита whoami устарела утилитой id (1) и эквивалентна id -un. Команда id -pпредлагается для обычного интерактивного использования.

DFA
источник
11

Я почти уверен, что терминал в OS X такой же, как unix, поэтому команда будет такой:

whoami

На данный момент у меня нет Mac, так что кто-нибудь поправит меня, если я ошибаюсь.

ПРИМЕЧАНИЕ. - whoamiУтилита устарела и эквивалентна id -un. Это даст вам текущего пользователя

Эрик Кослоу
источник
10

Через здесь

Проверка владельца / dev / console, похоже, работает хорошо.

stat -f "%Su" /dev/console

Лоуренс Джонстон
источник
1
Это отлично работает, если вы подключены к машине по ssh и хотите узнать, вошел ли пользователь в систему локально. Если это не так, команда вернет «root».
Тим Дирборн
4

Если вы хотите знать, кто в данный момент вошел в систему:

$ w
 15:56:14 до 5 дней, 20:58, 6 пользователей, средняя нагрузка: 0,43, 0,53, 0,50
ВХОД ПОЛЬЗОВАТЕЛЯ TTY @ IDLE JCPU PCPU ЧТО
me pts / 2 Fri19 1: 03m 0.98s 0.98s - / bin / bash
мне пц / 3 09:55 6: 00м 0,43 с 0,43 с / bin / bash
me pts / 5 15:56 0.00s 0.23s 0.00sw

(Это из системы Linux; форматирование в OS X может немного отличаться, но информация должна быть примерно такой же.)

Может быть несколько сеансов входа в систему; В конце концов, UNIX спроектирована как многопользовательская система.

эфемерный
источник
4

Вы также можете использовать lognameкоманду из Руководства по основным командам BSD в Linux или MacOS, чтобы увидеть имя пользователя, вошедшего в систему, даже если пользователь выполняет какую-либо sudoоперацию. Это полезно, например, при изменении crontab пользователя при установке общесистемного пакета с помощью sudo:crontab -u $(logname)

За man logname:

LOGNAME(1)

NAME
    logname -- display user's login name
Адам Линк
источник
1
Это определенно самое чистое и простое решение. Это работает независимо от того, какой пользователь выполняет команду.
Максим Виарг
2

Вопрос не получил полного ответа, ИМХО. Я попытаюсь объяснить: у меня есть запись crontab, которая планирует процедуру команды оболочки bash, которая, в свою очередь, выполняет некоторую очистку моих файлов; и, когда это будет сделано, отправляет мне уведомление с помощью центра уведомлений OS X (с помощью команды osascript -e 'display notification ...). Если кто-то (например, моя жена или моя дочь) переключает на нее текущего пользователя компьютера, оставляя меня в фоновом режиме, сценарий cron завершается ошибкой при отправке уведомления.

Итак, кто является текущим пользователем, означает, что некоторые другие люди стали эффективными пользователями, оставив меня в тени ? У stat -f "%Su" /dev/consoleвозвращает текущий активный пользователь имя?

Ответ положительный; Итак, теперь мой сценарий оболочки crontab был изменен следующим образом:

...
if [ "$(/usr/bin/stat -f ""%Su"" /dev/console)" = "loreti" ]
then /usr/bin/osascript -e \
  'display notification "Cleanup done" sound name "sosumi" with title "myCleanup"'
fi
Маурицио Лорети
источник
2

получить имя пользователя в MAC-терминале просто ...

Я обычно использую whoamiв терминале ...

Например, в данном случае мне это нужно для установки Tomcat Server ...

введите описание изображения здесь

Алиреза
источник
2

Есть два пути-

whoami

или

echo $USER
Манас Шарма
источник
1

Вы также можете получить его из переменных среды, но это, вероятно, небезопасно, поэтому я бы пошел с ответом Эндрю.

printenv USER

Если вам нужно получить его из приложения, такого как Node, проще получить его из переменных среды, таких как

process.env.USER.

Что было бы круто
источник
1

Определите «активного пользователя».

Если вопрос в том, «кто вошел в систему», то «кто я» или «whoami» подойдет (хотя они дают разные ответы - «whoami» сообщает только имя пользователя; «кто я» сообщает на терминале и время входа тоже).

Если вопрос заключается в том, «какой идентификатор пользователя является эффективным идентификатором для оболочки», то часто лучше использовать «id». Это сообщает о реальном и действующем идентификаторе пользователя и группе, а также о дополнительных идентификаторах группы. Это может иметь значение, если в оболочке запущен SUID или SGID.

Джонатан Леффлер
источник