ユーザーのユーザー名を取得する必要があるプログラムをBashで作成しています。
という言葉を聞いたことがありますが、whoami
何をするか、どう使うかわかりません。
現在のユーザー名を取得するにはどのコマンドを使用しますか?
man whoami
は、通常、ドキュメントをチェックするための最初のストップとして、チェックをお勧めします。
ユーザーのユーザー名を取得する必要があるプログラムをBashで作成しています。
という言葉を聞いたことがありますが、whoami
何をするか、どう使うかわかりません。
現在のユーザー名を取得するにはどのコマンドを使用しますか?
man whoami
は、通常、ドキュメントをチェックするための最初のストップとして、チェックをお勧めします。
回答:
コマンドラインで、
whoami
または
echo "$USER"
これらの値を変数に保存するには、次のようにします。
myvariable=$(whoami)
または
myvariable=$USER
もちろん、変数を作成する必要があるため、変数を作成する必要はありません$USER
。
$USER
まったく設定されていません。それはユーザーによって上書きすることができますので、さらに悪いことに、それだけで環境変数は、次のとおりです。USER=thisisnotmyname bash -c 'echo $USER' # prints thisisnotmyname
whoami
(提案したように)を使用すると、上書きされた環境変数がコンテキスト内の潜在的な問題であると想定して、問題が完全に解消されます。
の代替whoami
はid -u -n
です。
id -u
ユーザーIDを返します(例:rootの場合は 0 )。
"${USER}"
そして、whoami
の両方がログインする方法によって異なります。具体的には、ログインシェルとsudoは$ USER、および設定されますwhoami
標準入力に接続ユーザーのルックスを。ただし、cronからバッチジョブを実行している場合、またはroot以外のユーザーとして起動スクリプトを実行している場合、これらは誤ったユーザー(root)を出力するか、何も出力しません。この回答は、プロセスのユーザーIDを見ても正しい値を返します。
-n
、元の質問のように、引数がユーザー名を出力することがわかります。以下を参照してください:id -u -n
プリントbrett
-ダーウィンでも。
logname
ログインしているユーザーを取得するには、標準のUnix / Linux / BSD / MacOSコマンドを使用します。これらは信頼できないレポーターであるため、環境と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
私がSolaris 9とLinuxで使用したハックは、両方で正常に機能します。
ps -o user= -p $$ | awk '{print $1}'
このスニペットは、現在のEUIDを持つユーザーの名前を出力します。
注:ここではインタープリターとしてBashが必要です。
Solarisでは、上記の方法に問題があります。
id
-u
と-n
パラメータを受け入れません(したがって、出力を解析する必要があります)whoami
存在しない(デフォルト)who am I
現在の端末の所有者を出力します(EUIDを無視します)$USER
変数は、プロファイルファイル(など/etc/profile
)を読み取った後にのみ正しく設定されますps
コマンドは現在のシェルのpidの所有者を表示するために必要なすべてのものです。
command -p id
(POSIXシェルから)またはを使用し/usr/xpg4/bin/id
ます。より一般的には、Solarisでは、70s / 80sからのコマンドがPATH=
行き詰まらないように、環境を変更して(getconf PATH`のようなものを使用して、必ず実行する/usr/xpg4/bin/sh
)POSIX環境にする必要があります。
2つのコマンド:
id
グループと共にユーザーIDを出力します。フォーマット:uid=usernumber(username) ...
whoami
現在のユーザー名を与える
root(sudo)権限が必要な場合(通常、スクリプトを使用する場合は90%以上)、以前の回答の方法で常に回答が得られますroot
。
現在の「ログイン」ユーザーを取得するのも同じくらい簡単ですが、さまざまな変数にアクセスする必要が$SUDO_UID
あり$SUDO_USER
ます。
それらはエコーすることができます:
echo $SUDO_UID
echo $SUDO_USER
または割り当て済み、たとえば:
myuid=$SUDO_UID
myuname=$SUDO_USER
現在のユーザーのユーザー名は、${parameter@operator}
パラメーター拡張(Bash 4.4で導入)を使用して純粋なBashで取得できます。
$ : \\u
$ printf '%s\n' "${_@P}"
に格納されている最後の引数を設定することにより、一時変数の代わりに:
組み込み(の同義語true
)が使用され$_
ます。次に\u
、P
演算子を使用したプロンプト文字列であるかのように展開()します。
これは、通常の環境変数であるため$USER
、を使用するよりも優れてい$USER
ます。変更したり、設定を解除したりできます。意図的に改ざんされていなくても、ログインシェル(su
のデフォルト)を起動せずにユーザーを切り替えた場合に、それがまだ正しくない一般的なケースです。
上のほとんどのLinuxシステムでは、単に入力にwhoamiコマンドラインでは、ユーザーIDを提供します。
ただし、Solarisでは、以下のコマンドを使用してログインしたユーザーのUIDを判別することにより、ユーザーIDを判別する必要がある場合があります。
echo $UID
UIDがわかったら、UIDを/etc/passwd
ファイルと照合してユーザーを見つけます。
cat /etc/passwd | cut -d":" -f1,3
現在のタスクのuser_structを取得します
#define get_current_user() \
({ \
struct user_struct *__u; \
const struct cred *__cred; \
__cred = current_cred(); \
__u = get_uid(__cred->user); \
__u; \
})