私が欲しいのは、このスクリプトがSudo
によって実行されるときに、bashスクリプトを実行するユーザーの名前を見つけることです。私が知っている唯一の可能な方法は、この方法でwho -m
(who 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
)が何もしないことです。どうして?
もう1つの質問は、Ubuntuの onlineマニュアルページ のwho
が、Ubuntuデスクトップまたはサーバーで実行されたman who
と異なる理由です。
しかし、これらの質問は私の目標ではそれほど重要ではありません。タイトルで言及されているように、主な質問は次のとおりです。Sudo
?が使用されているときに、どのユーザーがスクリプトを実行するかを見つけるには
実際には、元のタイトル- Ubuntuデスクトップで「私は誰ですか」を見つけるにはどうすればよいですか? .
私はしばらく前に同様の問題を抱えていましたが、これまで私にとって確実に機能していた唯一の方法は次のとおりです。
echo ${Sudo_USER:-${USER}}
ユーザーが自分でシェルを操作している限り、$USER
にはユーザー名が含まれます。彼がSudo
を呼び出すと、新しいサブシェルの$Sudo_USER
は、呼び出し元のシェルの$USER
に設定され、$USER
はもちろんroot
になります。
演算子:-
を使用したトリックは、式全体が(Sudo
によって開かれたサブシェル内で)設定されている場合は$Sudo_USER
に評価され、そうでない場合は$USER
に評価されることです。したがって、常に正しいユーザー名を持ち、式が評価されるコンテキストについてあまり心配する必要はありません。これは便利であることがわかりました。
who am i
の代わりにwhoami
を試してください