web-dev-qa-db-ja.com

sudoが使用されているときにスクリプトを実行するユーザーを見つけるにはどうすればよいですか?

私が欲しいのは、このスクリプトがSudoによって実行されるときに、bashスクリプトを実行するユーザーの名前を見つけることです。私が知っている唯一の可能な方法は、この方法でwho -mwho am i)の出力を解析することです:

user@UbuntuServer:~$ cat who.sh 
#!/bin/sh
whoami
echo $USER
who -m | awk '{print $1}'

user@UbuntuServer:~$ Sudo ./who.sh 
root
root
user

問題は、Ubuntu Desktop 16.04.4ではwho -m(またはwho am i)が何もしないことです。どうして?

enter image description here

もう1つの質問は、Ubuntuの onlineマニュアルページwhoが、Ubuntuデスクトップまたはサーバーで実行されたman whoと異なる理由です。

しかし、これらの質問は私の目標ではそれほど重要ではありません。タイトルで言及されているように、主な質問は次のとおりです。Sudoが使用されているときに、どのユーザーがスクリプトを実行するかを見つけるには


実際には、元のタイトル- Ubuntuデスクトップで「私は誰ですか」を見つけるにはどうすればよいですか? .

1
pa4080

私はしばらく前に同様の問題を抱えていましたが、これまで私にとって確実に機能していた唯一の方法は次のとおりです。

echo ${Sudo_USER:-${USER}}

ユーザーが自分でシェルを操作している限り、$USERにはユーザー名が含まれます。彼がSudoを呼び出すと、新しいサブシェルの$Sudo_USERは、呼び出し元のシェルの$USERに設定され、$USERはもちろんrootになります。

演算子:-を使用したトリックは、式全体が(Sudoによって開かれたサブシェル内で)設定されている場合は$Sudo_USERに評価され、そうでない場合は$USERに評価されることです。したがって、常に正しいユーザー名を持ち、式が評価されるコンテキストについてあまり心配する必要はありません。これは便利であることがわかりました。

4
Wanderer

who am iの代わりにwhoamiを試してください

2
Denny John