看看/etc/passwd
文件。该文件向您展示了用户信息的存储方式。您的用户信息可能会或可能不会存储在此处(Unix 使用几种不同的数据库来存储用户),但格式是相同的。
基本上,Unix 使用用户 ID (UID) 来存储用户是什么。下一个条目是旧密码条目,然后是 UID、主要组 ID、GECOS字段、$HOME
目录和用户的 shell。(在 MacOS 的命令中显示了三个额外的条目id -P
。我不知道它们是什么,但它们使 GECOS 字段成为第八个字段而不是第五个字段)。
在您的系统上使用该id -P
命令为您提供了此条目。一些系统使用getent
甚至getpwent
作为命令。你需要做的是解析这个条目。每个字段由冒号分隔,因此您需要第五个或第八个条目(取决于您必须使用的命令)。
awk
andcut
命令可以很好地做到这一点。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