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

问题描述 投票:10回答:7

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

unix
7个回答
13
投票
getent passwd `whoami` | cut -d : -f 5

getent通常比gazxswpoi更好)。


3
投票

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

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

在任一情况下,

  1. 您必须先获取当前用户的登录名或ID,然后
  2. 无法保证gecos字段实际上包含用户的真实全名或任何内容。

2
投票
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."

1
投票

具体到macOS,没有cat <<EOF Hello, $( getent passwd "$USER" | cut -d: -f5 | cut -d, -f1 ). How are you doing? EOF 命令;相反,你必须使用getent


0
投票

对于macOS和Linux:

id -F


-1
投票

我用


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

-2
投票

如何尝试whoami或logname

© www.soinside.com 2019 - 2024. All rights reserved.