ユーザーIDに関連付けられたユーザー名を取得するPOSIX互換の方法
ユーザーIDに関連付けられたログイン名を取得したいことがよくあります。これは一般的なユースケースであることが証明されているため、これを行うシェル関数を作成することにしました。私は主にGNU / Linuxディストリビューションを使用していますが、スクリプトをできるだけ移植性のあるものに書き、自分がやっていることがPOSIX互換であることを確認しようとしています。 解析 /etc/passwd 私が試みた最初のアプローチは、/etc/passwd(を使用してawk)解析することでした。 awk -v uid="$uid" -F: '$3 == uid {print $1}' /etc/passwd ただし、このアプローチの問題は、ログインがローカルではない可能性があることです。たとえば、ユーザー認証はNISまたはLDAPを介して行われる可能性があります。 getentコマンドを使用する を使用するgetent passwdと、/etc/passwd非ローカルのNISまたはLDAPデータベースも照会されるため、解析よりも移植性が高くなります。 getent-ウィキペディア getent(1)-Linux manページ getent passwd "$uid" | cut -d: -f1 残念ながら、getentユーティリティはPOSIXで指定されていないようです。 idコマンドを使用する id ユーザーのIDに関するデータを取得するためのPOSIX標準化ユーティリティです。 BSDおよびGNU実装は、オペランドとしてユーザーIDを受け入れます。 id(1)-OpenBSDのマニュアルページ id(1)– FreeBSD manページ GNU Coreutils:ID呼び出し これは、ユーザーIDに関連付けられたログイン名の印刷に使用できることを意味します。 id -nu "$uid" ただし、オペランドとしてユーザーIDを指定することはPOSIXでは指定されていません。オペランドとしてのログイン名の使用についてのみ説明します。 上記のすべてを組み合わせる 上記の3つのアプローチを次のように組み合わせることを検討しました。 get_username(){ uid="$1" …