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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在Unix中获取登录用户的真实姓名?相关的知识,希望对你有一定的参考价值。

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

答案
getent passwd `whoami` | cut -d : -f 5

getent通常比gazxswpoi更好)。

另一答案

您可以使用/etc/passwd获取每个连续的密码输入,直到找到与当前登录用户匹配的密码,然后解析getpwent()字段。

更好的是,您可以使用gecos直接获取当前用户的uid条目。

在任一情况下,

  1. 您必须先获取当前用户的登录名或ID,然后
  2. 无法保证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中获取登录用户的真实姓名?的主要内容,如果未能解决你的问题,请参考以下文章

如何在使用苹果功能登录时使用“用户”参数获取电子邮件、姓名等用户信息?

如何在应用程序中获取用户 Facebook 朋友的姓名、数量和 ID? [关闭]

如何识别哪个活动调用片段

使用模拟时获取真实登录用户

登录 ASP.NET Core 3.1 后如何获取用户信息

从登录的社交网络中获取访客姓名