/etc/passwdファイルを見てください。このファイルは、ユーザー情報がどのように保管されているかを示しています。ユーザー情報はここに保存される場合と保存されない場合があります (Unix がユーザーを保存するために使用するいくつかの異なるデータベースがあります) が、形式は同じです。
基本的に、Unix はユーザー ID (UID) を使用して、どのユーザーが何なのかを格納します。次のエントリは古いパスワード エントリで、UID、プライマリ グループ ID、GECOSフィールド、$HOMEディレクトリ、およびユーザーのシェルです。(MacOS のコマンドには 3 つの余分なエントリが表示されますid -P。それらが何であるかはわかりませんが、GECOS フィールドを 5 番目のフィールドではなく 8 番目のフィールドにします)。
id -Pシステムでコマンドを使用すると、このエントリが得られました。一部のシステムではgetent、またはgetpwentをコマンドとして使用します。あなたがする必要があるのは、このエントリを解析することです。各フィールドはコロンで区切られているため、5 番目または 8 番目のエントリが必要です (使用するコマンドによって異なります)。
awkandコマンドは、cutこれを非常にうまく行います。cutおそらくより効率的ですが、awkより一般的であるため、私はそれを使用する傾向があります。
ではawk、標準のフィールド セパレータは空白ですが、-Fパラメータを使用してこれを変更できます。Awk では、行の各フィールドに数字が付けられ、先頭にドル記号が付きます。フィールドは$0行全体です。
を使用するawkと、次のようになります。
id -P | awk -F: '{print $8}'
これは、id -Pコマンドを受け取り、:をフィールドセパレータとして使用し、8 番目のフィールドを出力することを示しています。中括弧はすべてのAWK プログラムを囲みます。単一引用符は、シェルが$8.
BASH では$( )、コマンドを実行してその出力を返すために使用できるため、環境変数を設定できます。
$USER_NAME=$(id -P | awk -F: `{print $8}`)
echo $USER_NAME