
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
答え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
。