41

/etc/passwd を grep することもできましたが、面倒なようです。「finger」がインストールされていないため、その依存関係を避けたいと考えています。これはプログラム用なので、ユーザー情報にアクセスできるコマンドがあればいいのにと思います。

4

11 に答える 11

8

最小限の Debian/Ubuntu インストールでテストされた他の回答の組み合わせ:

getent passwd "$USER" | cut -d ':' -f 5 | cut -d ',' -f 1
于 2013-09-18T15:37:57.057 に答える
7

これを試して:

getent passwd eutl420 | awk -F':' '{gsub(",", "",$5); print $5}'
于 2011-07-07T09:11:14.690 に答える
2

私のコードは bash と ksh で動作しますが、dash や古い Bourne シェルでは動作しません。必要に応じて、他のフィールドも読み取ります。

IFS=: read user x uid gid gecos hm sh < <( getent passwd $USER )
name=${gecos%%,*}
echo "$name"

/etc/passwd ファイル全体をスキャンすることもできます。これはプレーンな Bourne シェルでは 1 つのプロセスで機能しますが、LDAP などではあまり機能しません。

while IFS=: read user x uid gid gecos hm sh; do
  name=${gecos%%,*}
  [ $uid -ge 1000 -a $uid -lt 60000 ] && echo "$name"
done < /etc/passwd

一方、ツールを使用することは良いことです。Cもいいですね。

于 2012-08-15T09:20:24.400 に答える
0

Linuxでフルネームを変数に入れる方法は次のとおりです。

u_id=`id -u`
uname=`awk -F: -vid=$u_id '{if ($3 == id) print $5}' /etc/passwd`

次に、単純に変数を使用します。例:$ echo $uname

于 2017-07-31T06:25:57.317 に答える
-1

テイク 1:

$ user_name=sshd
$ awk -F: "\$1 == \"$user_name\" { print \$5 }" /etc/passwd
Secure Shell Daemon

ただし、passwd データベースは、gecos で特殊文字「&」をサポートしているため、ユーザー名の大文字の値に置き換える必要があります。

$ user_name=operator
$ awk -F: "\$1 == \"$user_name\" { print \$5 }" /etc/passwd
System &

ここでの回答のほとんど(フィンガーソリューションを除く)は、&を尊重しません。このケースをサポートしたい場合は、より複雑なスクリプトが必要になります。

テイク 2:

$ user_name=operator
$ awk -F: "\$1 == \"$user_name\" { u=\$1; sub(/./, toupper(substr(u,1,1)), u);
    gsub(/&/, u, \$5); print \$5 }" /etc/passwd
System Operator
于 2013-11-10T11:56:50.617 に答える
-3

古き良きも役立つかもしれません:-)

finger $USER |head -n1 |cut -d : -f3
于 2012-09-13T00:35:52.180 に答える