sudoを使用して実行する必要があるbashスクリプトを作成したいが、それを実行しているsudo以外のユーザーの名前を考慮する必要があります。だからユーザーがbob
実行したときに誰が実行したのか知りsudo ./myscript.sh
たいのです。myscript.sh
bob
内部を見てみましょうmyscript.sh
。
USER=$(whoami)
# Do something that takes into account the username.
プロセスを作成したユーザーの名前はどのようにわかりますか?より具体的には、whoami
getbob
と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
。