sudo として bash スクリプトを実行したユーザーの名前を取得するにはどうすればよいですか?

sudo として bash スクリプトを実行したユーザーの名前を取得するにはどうすればよいですか?

sudo で実行する必要があるが、それを実行した非 sudo ユーザーの名前を考慮する必要がある bash スクリプトを作成したいと考えています。ユーザーがbob実行した場合、誰がそれを実行したのかを知りたいsudo ./myscript.shのです。myscript.shbob

中を見てみましょうmyscript.sh:

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

プロセスを生成したユーザーの名前を知るにはどうしたらいいですか? 具体的には、ではなくwhoamiを取得するには、 の代わりに何を使うべきでしょうか?bobroot

答え1

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

   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

関連情報