web-dev-qa-db-ja.com

現在のユーザーのユーザー名をbashで取得しますか?

ユーザーのユーザー名を取得する必要があるプログラムをbashで書いています。

私はwhoamiと呼ばれることを聞いたことがありますが、それが何をするのか、あるいはどのように使うのかわかりません。

現在のユーザー名を取得するためにどのようなコマンドを使用しますか?

236
George

コマンドラインで次のように入力します。

echo "$USER"

または

whoami

これらの値を変数に保存するには、

myvariable=$(whoami)

または

myvariable=$USER

もちろん、変数を作る必要はありません。それが$USER変数の目的なのです。

347
SethMMorton

whoamiの代わりにid -u -nがあります。

id -uはユーザーIDを返します(例:rootの場合は0)。

60
Brett

私がSolaris 9とLinuxで使ったことのあるハックで、どちらもうまく機能します。

ps -o user= -p $$ | awk '{print $1}'

このスニペットは、現在のEUIDを持つユーザーの名前を印刷します。

注: ここでインタプリタとしてbashが必要です。

Solarisでは、上記の方法で問題があります。

  • id-uおよび-nパラメータを受け付けません(したがって、出力を解析する必要があります)
  • whoamiは存在しません(デフォルト)
  • who am Iは現在の端末の所有者を表示します(EUIDを無視します)
  • $USER変数は、プロファイルファイルを読み込んだ後にのみ正しく設定されます(例:/etc/profile
16
Elvenfighter

ログインしたユーザーを取得するには、標準のUnix/Linux/BSD/MacOSコマンドlognameを使用します。これらは信頼性の低いレポーターであるため、これはSudoと同様に環境を無視します。ログインユーザーの名前を常に表示して終了します。この命令は1981年頃から出回っています。

My-Mac:~ devin$ logname
devin
My-Mac:~ devin$ Sudo logname
Password:
devin
My-Mac:~ devin$ Sudo su -
My-Mac:~ root# logname
devin
My-Mac:~ root# echo $USER
root
13
Devin R

2つのコマンド

  1. idは、グループとともにユーザーIDを出力します。フォーマット:uid=usernumber(username) ...

  2. whoamiは現在のユーザー名を与えます

11

Root(Sudo)権限が必要な場合(スクリプト使用時は通常90%以上)、上記の方法では常に答えとしてrootが与えられます。

現在の「ログイン」ユーザーを取得するのも同じように簡単ですが、異なる変数$Sudo_UID$Sudo_USERにアクセスする必要があります。

それらは反響することができます:

echo $Sudo_UID
echo $Sudo_USER

または割り当てられた、例えば:

myuid=$Sudo_UID
myuname=$Sudo_USER
6
OldManRiver

Solaris OSでは、このコマンドを使いました。

$ who am i     # remember to use it with space.

Linuxでは - 誰かがすでにコメントでこれに答えています。

$ whoami       # without space
5
Lin-man

bash/ksh/shなどのためにあなたの質問の多くはすぐにどちらかによって答えられます:

man [function]

使用しているシステムのドキュメントを入手する。

あるいは、通常はもっと便利です。google "man function"これは、linuxとunixの間にわずかな違いがある場合には、異なる結果をもたらすかもしれません。

この質問では、シェルに「whoami」と入力してください。

それをスクリプト化するには:

myvar=$(whoami)

5
Fred Mitchell

現在のユーザのユーザ名は${parameter@operator}パラメータ展開(Bash 4.4で導入された)を使って純粋なBashで得ることができます。

$ : \\u
$ printf '%s\n' "${_@P}"

:に格納されている最後の引数を設定することで、一時変数の代わりに$_組み込み(trueと同義)が使用されます。それをP演算子を使ったPrompt文字列のように展開します(\u)。

$USERは単なる通常の環境変数なので、これは$USERを使用するよりも優れています。意図的に改ざんされていなくても、まだ間違っている一般的なケースは、ユーザーがログインシェルを起動せずに切り替えられた場合です(suのデフォルト)。

1
Crestwave

ほとんどのLinuxシステムでは、コマンド行にwhoamiと入力するだけでユーザーIDが提供されます。

ただし、Solarisでは、以下のコマンドでログインしたユーザーのUIDを確認して、ユーザーIDを確認する必要があります。

echo $UID

UIDがわかったら、そのUIDを/ etc/passwdと照合してユーザーを見つけます。

cat /etc/passwd | cut -d":" -f1,3
0
John