スクリプトを作成する場合/root/bin/whoami.sh
次を含む:
#!/bin/bash
whoami
このスクリプトは、適切に構成されたSudoを持つユーザーによって呼び出されます。
root
スクリプトで実際のユーザーをすばやく取得する方法はありますか、またはこのユーザー名に沿って渡すパラメーターに頼らなければなりませんか?
Sudo su -
を使用している場合、$ Sudo_USERは機能しません。
複数のチェックも必要です-$USER == 'root'
の場合は$Sudo_USER
を取得します。
コマンドwhoami
の代わりにwho am i
を使用します。これにより、現在のセッションに対してフィルター処理されたwho
コマンドが実行されます。必要以上の情報を提供します。したがって、ユーザーだけを取得するにはこれを実行します。
who am i | awk '{print $1}'
代わりに(そしてより簡単に)logname
を使用できます。上記のステートメントと同じことを行います。
これにより、セッションにログインしたユーザー名が得られます。
これらは、Sudo
またはSudo su [whatever]
に関係なく機能します。また、su
およびSudo
が何回呼び出されても機能します。
$ Sudo_USER が有効だと思います。
#!/bin/bash
echo $Sudo_USER
whoami
Sudoかどうかに関係なく、スクリプトを呼び出した人のユーザー名を取得する方法は次のとおりです。
if [ $Sudo_USER ]; then user=$Sudo_USER; else user=`whoami`; fi
またはより短いバージョン
[ $Sudo_USER ] && user=$Sudo_USER || user=`whoami`
who am i | awk '{print $1}'
私にはうまくいきませんでしたが、who|awk '{print $1}'
は仕事をする
奇妙なことに、システムは 実際のUIDと有効なUID を区別しますが、これをシェルレベルでエクスポートするプログラムは見つかりません。
whoami
、who am i
、who
、id
、または$Sudo_USER
の使用は適切ではありません。
実際、who
は、ログインしたユーザーのみをリストするため、質問に対する解決策になることはありません。
私の目には、唯一の価値ある答えはlogname
の使用です。
お役に立てれば
ロブ