Sudoで実行する必要があるが、それを実行した非Sudoユーザーの名前を考慮に入れる必要があるbashスクリプトを作成したい。したがって、ユーザーbob
がSudo ./myscript.sh
をお願いします myscript.sh
知ってbob
はそれを実行した人です。
中を見てみましょうmyscript.sh
:
USER=$(whoami)
# Do something that takes into account the username.
プロセスを生成したユーザーの名前を知るにはどうすればよいですか?より具体的には、whoami
ではなくbob
を取得するには、root
の代わりに何を使用すればよいですか?
標準かどうかはわかりませんが、少なくとも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
Sudo
なしでも動作させる場合は、${Sudo_USER:-$USER}
を使用します。例えば:
printf '%s\n' "${Sudo_USER:-$USER}"
${var:-val}
は、未設定または空でない限り、$var
に展開されます。その場合、val
に展開されます。