我想获得“友好”名称,而不是用户名,至少如果给定用户存在这样的字符串。我尝试过的事情:
whoami
jamesarosen
id -un
jamesarosen
id -p
uid jamesarosen
groups staff com.apple.access_screensharing ...
id -P
jamesarosen:********:501:20::0:0:James A. Rosen:/Users/jamesarosen:/bin/bash
最后一个有我正在寻找的信息,但我不想解析它,特别是因为我对格式(特别是:
的数量并不十分自信) )将在各个操作系统中保持一致。
答案 0 :(得分:12)
/ etc / passwd和大多数GECOS field的格式在类Unix系统中非常标准化。如果您发现异常,请务必告诉我们。同时,在类Unix系统上获得所需内容的最简单方法是使用 getent 和 cut 来解析GECOS字段。例如:
getent passwd $LOGNAME | cut -d: -f5 | cut -d, -f1
答案 1 :(得分:2)
我知道的唯一方法是解析它:
grep -P "^$(whoami):" /etc/passwd | cut -f5 -d:
您可以非常肯定/ etc / passwd的格式
答案 2 :(得分:2)
您可以使用finger
获取该信息:
finger `id -un` | head -1 | cut -d: -f3-
它的优点(或缺点,取决于您的要求),它将检索非本地用户的信息。
如果您只想从/etc/passwd
获取信息,您很可能必须以其他方式解析文件,正如其他人已经提到的那样。我个人更喜欢awk
来完成这项任务:
awk -F: -vid=`id -u` '{if ($3 == id) print $5}' /etc/passwd
答案 3 :(得分:1)
查看/etc/passwd
文件。此文件显示用户信息的存储方式。您的用户信息可能存储也可能不存储(Unix有几个不同的数据库用于存储用户),但格式相同。
基本上,Unix使用用户ID(UID)来存储用户是什么。下一个条目是旧密码条目,然后是UID,主要组ID,GECOS字段,$HOME
目录和用户shell。 (MacOS中的id -P
命令中显示了三个额外的条目。我不知道它们是什么,但它们使GECOS字段成为第八个字段而不是第五个字段。
在您的系统上使用id -P
命令为您提供此条目。有些系统使用getent
甚至getpwent
作为命令。您需要做的是解析此条目。每个字段用冒号分隔,因此您需要第五个或第八个条目(取决于您必须使用的命令)。
awk
和cut
命令可以很好地执行此操作。 cut
可能效率更高,但awk
更常见,所以我倾向于使用它。
在awk
中,标准字段分隔符为空格,但您可以使用-F
参数更改此设置。在Awk中,一行中的每个字段都有一个数字,前面有一个美元符号。 $0
字段是整行。
使用awk
,您得到:
id -P | awk -F: '{print $8}'
这表示采用id -P
命令,并使用:
作为字段分隔符,并打印出第八个字段。大括号包围所有 AWK程序,并且需要使用单引号来防止shell解释$8
。
在BASH中,您可以使用$( )
来运行命令并返回它的输出,这样您就可以设置环境变量:
$USER_NAME=$(id -P | awk -F: `{print $8}`)
echo $USER_NAME
答案 4 :(得分:1)
至少在macOS上(可能还有其他* BSD-alikes),您可以使用:id -F
来获取全名。