如何在Unix中获取登录用户的真实姓名?

bra*_*sch 11 unix

我正在寻找登录用户的真实(全名),以避免在我正在建立的应用程序中提示它.我看到finger命令会输出一个包含此列表的圆柱列表数据,并且想知道grep是否有意义或是否有更简单的方法?我发现的手指开关都没有输出真实姓名.任何想法将不胜感激.

Tod*_*wen 13

getent passwd `whoami` | cut -d : -f 5
Run Code Online (Sandbox Code Playgroud)

(getent通常比grepping更好/etc/passwd).

  • 这仅在带有`getent`的UNIXen上有效;macOS不是其中之一。 (2认同)

blu*_*lub 5

getent passwd "$USER" | cut -d: -f5 | cut -d, -f1
Run Code Online (Sandbox Code Playgroud)

这首先从passwd数据库中获取当前用户的行(也可能存储在NISLDAP 上

在提取的行中,字段由:分隔符分隔。该GECOS项是第5场,因此,第一cut提取这一点。

GECOS条目本身可能是由多个项目-通过分离,其中的全称是第一个项目- 。这就是第二个cut提取的内容。如果GECOS条目缺少逗号,这也有效。在这种情况下,整个条目是第一项。

您还可以将结果分配给变量:

fullname=$( getent passwd "$USER" | cut -d: -f5 | cut -d, -f1 )
Run Code Online (Sandbox Code Playgroud)

或者直接进一步处理:

echo "$( getent passwd "$USER" | cut -d: -f5 | cut -d, -f1 )'s home is $HOME."
Run Code Online (Sandbox Code Playgroud)
cat <<EOF
Hello, $( getent passwd "$USER" | cut -d: -f5 | cut -d, -f1 ).
How are you doing?
EOF
Run Code Online (Sandbox Code Playgroud)


小智 -2

尝试一下 whoami 或 logname 怎么样

  • whoami 或 logname 输出登录的用户名,而不是按照他的请求分配给帐户的“全名” (2认同)