我想获得"友好"名称,而不是用户名,至少在给定用户的字符串中。我尝试过的事情:
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
最后一个有我要寻找的信息,但我宁愿不必将其解析,尤其是因为我对格式(特别是:
s的数量)并不十分充满信心跨OS。
解析用户全名
的GECOS字段/etc/passWD的格式和大多数GECOS字段在类似于Unix的系统中都非常标准化。如果您发现例外,请一定要告诉我们。同时,在类似Unix的系统上获得想要的最简单方法是使用 getent 和 cut 来解析Gecos字段。例如:
getent passwd $LOGNAME | cut -d: -f5 | cut -d, -f1
我知道的唯一方法是解析它:
grep -P "^$(whoami):" /etc/passwd | cut -f5 -d:
您可以确定/etc/passwd的格式
您可以使用finger
获取该信息:
finger `id -un` | head -1 | cut -d: -f3-
具有优势(或不利的不同,取决于您的要求),它将为非本地用户检索信息。
如果您只想从/etc/passwd
获取信息,那么像其他人已经提到的那样,您很可能必须以一种或另一种方式分析文件。我个人更喜欢awk
完成此任务:
awk -F: -vid=`id -u` '{if ($3 == id) print $5}' /etc/passwd
看一下/etc/passwd
文件。此文件向您显示如何存储用户信息。您的用户信息可能会在此处存储,也可能不会存储(UNIX用于存储用户使用了几种不同的数据库),但是格式是相同的。
基本上,UNIX使用用户ID(UID)存储什么用户。下一个条目是旧的密码条目,然后是UID,主要组ID,GECOS字段,$HOME
目录和用户的外壳。(MacOS中的id -P
命令中显示了三个额外的条目。我不知道它们是什么,但是它们使Gecos字段成为第八个字段,而不是第五个字段)。
使用系统上的id -P
命令为您提供了此条目。一些系统使用getent
甚至getpwent
作为命令。您需要做的是解析此条目。每个场都被结肠隔开,因此您需要第五或第八个条目(取决于您必须使用的命令)。
awk
和cut
命令做得很好。cut
可能更有效,但是awk
更常见,所以我倾向于使用它。
在awk
中,标准场分隔符是 White Space ,但是您可以使用-F
参数来更改此操作。在尴尬中,一行中的每个字段都有一个数字,并在一个美元符号之前。$0
字段是整个线。
使用awk
,您得到:
id -P | awk -F: '{print $8}'
这说要采用id -P
命令,并将:
用作字段分离器,然后打印出第八个字段。卷曲括号围绕着所有 awk程序,需要单个引号来防止外壳解释$8
。
在Bash中,您可以使用$( )
运行命令并返回其输出,因此您可以设置环境变量:
$USER_NAME=$(id -P | awk -F: `{print $8}`)
echo $USER_NAME
至少在macOS上(以及其他 *bsd-alikes),您可以使用:id -F
仅获取全名。