bashスクリプトをsudoとして実行するためのユーザー名を取得する方法は?

bashスクリプトをsudoとして実行するためのユーザー名を取得する方法は?

sudoを使用して実行する必要があるbashスクリプトを作成したいが、それを実行しているsudo以外のユーザーの名前を考慮する必要があります。だからユーザーがbob実行したときに誰が実行したのか知りsudo ./myscript.shたいのです。myscript.shbob

内部を見てみましょうmyscript.sh

USER=$(whoami)
# Do something that takes into account the username.

プロセスを作成したユーザーの名前はどのようにわかりますか?より具体的には、whoamigetbobとnotの代わりに何を使うべきですかroot

答え1

標準がどれくらいになるかはわかりませんが、少なくともUbuntuシステムではsudo次の環境変数が設定されています(他の環境変数の中で -ENVIRONMENTマニュアルページのsudoセクションを参照)。

   SUDO_UID        Set to the user ID of the user who invoked sudo

   SUDO_USER       Set to the login of the user who invoked sudo

例えば、

steeldriver@lap-t61p:~$ sudo sh -c 'whoami'
root
steeldriver@lap-t61p:~$ sudo sh -c 'echo $SUDO_USER'
steeldriver

答え2

sudoなしで機能するには、以下を使用します${SUDO_USER:-$USER}

printf '%s\n' "${SUDO_USER:-$USER}"

${var:-val}設定されていないか空でない限り拡張されます$var。この場合に拡張されますval

関連情報