/etc/passwd
ファイルを見てください。このファイルは、ユーザー情報がどのように保管されているかを示しています。ユーザー情報はここに保存される場合と保存されない場合があります (Unix がユーザーを保存するために使用するいくつかの異なるデータベースがあります) が、形式は同じです。
基本的に、Unix はユーザー ID (UID) を使用して、どのユーザーが何なのかを格納します。次のエントリは古いパスワード エントリで、UID、プライマリ グループ ID、GECOSフィールド、$HOME
ディレクトリ、およびユーザーのシェルです。(MacOS のコマンドには 3 つの余分なエントリが表示されますid -P
。それらが何であるかはわかりませんが、GECOS フィールドを 5 番目のフィールドではなく 8 番目のフィールドにします)。
id -P
システムでコマンドを使用すると、このエントリが得られました。一部のシステムではgetent
、またはgetpwent
をコマンドとして使用します。あなたがする必要があるのは、このエントリを解析することです。各フィールドはコロンで区切られているため、5 番目または 8 番目のエントリが必要です (使用するコマンドによって異なります)。
awk
andコマンドは、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