web-dev-qa-db-ja.com

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

Sudoで実行する必要があるが、それを実行した非Sudoユーザーの名前を考慮に入れる必要があるbashスクリプトを作成したい。したがって、ユーザーbobSudo ./myscript.sh をお願いします myscript.sh知ってbobはそれを実行した人です。

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

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

プロセスを生成したユーザーの名前を知るにはどうすればよいですか?より具体的には、whoamiではなくbobを取得するには、rootの代わりに何を使用すればよいですか?

18
marcio

標準かどうかはわかりませんが、少なくともUbuntuシステムでは、Sudoが次の環境変数を設定します(特に、SudoマンページのENVIRONMENTセクションを参照してください)。

   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
29
steeldriver

Sudoなしでも動作させる場合は、${Sudo_USER:-$USER}を使用します。例えば:

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

説明

${var:-val}は、未設定または空でない限り、$varに展開されます。その場合、valに展開されます。

9
nyuszika7h