我正在寻找登录用户的真实(全名),以避免在我正在构建的应用程序中提示他们。我看到finger
命令将输出一个包含此列的数据列表,并且想知道grep是否有意义或是否有更简单的方法?我发现的手指开关都没有输出真实姓名。任何想法都会非常感激。
答案 0 :(得分:13)
getent passwd `whoami` | cut -d : -f 5
(getent
通常比grepping /etc/passwd
更好。
答案 1 :(得分:3)
您可以使用getpwent()获取每个连续的密码,直到找到与当前登录用户匹配的密码,然后解析gecos字段。
更好的是,您可以使用getpwuid()直接获取当前用户的uid条目。
在任何一种情况下,
答案 2 :(得分:2)
getent passwd "$USER" | cut -d: -f5 | cut -d, -f1
首先从passwd
数据库(也可能存储在 NIS 或 LDAP )中获取当前用户的行
在获取的行中,字段由:
分隔符分隔。 GECOS 条目是第5个字段,因此第一个cut
条目提取。
GECOS 条目本身可能由多个项目组成 - 以,
分隔 - 其中全名是第一项。这是第二个cut
提取的内容。如果 GECOS 条目缺少逗号,这也适用。在这种情况下,整个条目是第一个项目。
您还可以将结果分配给变量:
fullname=$( getent passwd "$USER" | cut -d: -f5 | cut -d, -f1 )
或直接进一步处理:
echo "$( getent passwd "$USER" | cut -d: -f5 | cut -d, -f1 )'s home is $HOME."
cat <<EOF
Hello, $( getent passwd "$USER" | cut -d: -f5 | cut -d, -f1 ).
How are you doing?
EOF
答案 3 :(得分:1)
特定于macOS,没有getent
命令;相反,你必须使用id -F
答案 4 :(得分:0)
对于macOS和Linux:
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
答案 5 :(得分:-1)
我用
grep "^$USER:" /etc/passwd | awk -F: '{print $5}'
解释:
grep
)从/etc/passwd
提取有关该用户的行awk
)将此行与分隔符':'
分开并打印第五个组件,
这是全名如果您不想依赖$USER
设置,可以改用:
grep "^`whoami`:" /etc/passwd | awk -F: '{print $5}'
答案 6 :(得分:-2)
如何尝试whoami或logname