如何在Unix中获取登录用户的真实姓名?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在Unix中获取登录用户的真实姓名?相关的知识,希望对你有一定的参考价值。
我正在寻找登录用户的真实(全名),以避免在我正在建立的应用程序中提示它。我看到finger
命令将输出一个包含此列表的圆柱列表数据,并且想知道grep是否有意义或是否有更简单的方法?我发现的手指开关都没有输出真实姓名。任何想法将不胜感激。
getent passwd `whoami` | cut -d : -f 5
(getent
通常比gazxswpoi更好)。
您可以使用/etc/passwd
获取每个连续的密码输入,直到找到与当前登录用户匹配的密码,然后解析getpwent()字段。
更好的是,您可以使用gecos直接获取当前用户的uid条目。
在任一情况下,
- 您必须先获取当前用户的登录名或ID,然后
- 无法保证gecos字段实际上包含用户的真实全名或任何内容。
getpwuid()
这首先从getent passwd "$USER" | cut -d: -f5 | cut -d, -f1
数据库中获取当前用户的行(也可能存储在NIS或LDAP上)
在获取的行中,字段由passwd
分隔符分隔。 GECOS条目是第5个字段,因此第一个:
提取。
GECOS条目本身可能由多个项目组成 - 由cut
分隔 - 其全名是第一项。这就是第二个,
提取的内容。如果GECOS条目缺少逗号,这也有效。在这种情况下,整个条目是第一个项目。
您还可以将结果分配给变量:
cut
或直接进一步处理:
fullname=$( getent passwd "$USER" | cut -d: -f5 | cut -d, -f1 )
echo "$( getent passwd "$USER" | cut -d: -f5 | cut -d, -f1 )'s home is $HOME."
具体到macOS,没有cat <<EOF
Hello, $( getent passwd "$USER" | cut -d: -f5 | cut -d, -f1 ).
How are you doing?
EOF
命令;相反,你必须使用getent
对于macOS和Linux:
id -F
我用
if [ "Darwin" = $(uname) ]; then
FULLNAME=$(id -P $USER | awk -F '[:]' '{print $8}')
else
FULLNAME=$(getent passwd $USER | cut -d: -f5 | cut -d, -f1)
fi
echo $FULLNAME
说明:
- $ USER包含当前用户的登录名
- 第一部分(
grep "^$USER:" /etc/passwd | awk -F: '{print $5}'
)从grep
中提取关于该用户的一行 - 第二部分(
/etc/passwd
)用分隔符awk
分割这一行并打印第五个组件,这是全名
如果您不想依赖':'
设置,您可以使用它:
$USER
如何尝试whoami或logname
以上是关于如何在Unix中获取登录用户的真实姓名?的主要内容,如果未能解决你的问题,请参考以下文章
如何在使用苹果功能登录时使用“用户”参数获取电子邮件、姓名等用户信息?