Sudoでシェルスクリプトを実行した場合、正しい$ USERを取得するにはどうすればよいですか?
Macインストールパッケージでインストール後のスクリプトとして実行し、自動的にSudoされますが、ユーザー名を使用して何かを行う必要があります。
ただし、$ HOMEは正しいです。エレガントでない方法は、ホームパスから名前を抽出することですが、これを行う自然な方法があるのではないかと思います。
スクリプトはインストーラー内の自動呼び出しであるため、スクリプトの呼び出し方法に影響を与えることはできません。
私のシステムでは、変数$Sudo_USER
が呼び出し元のユーザー名に設定されています。
${HOME}
変数からユーザー名を直接抽出しないでください。構成中であり、計算されていません。ユーザー名を抽出するには、/etc/passwd
ファイルを調べることができますが、これはシステムに大きく依存します。 LDAPディレクトリを調べる必要がある場合や、エントリがNISを介して伝播される場合があります...
$(logname)
を使用できます。これにより、現在sudoしている場合でもログイン名が返されます。
変数Sudo_USERを調べます。
http://www.gratisoft.us/Sudo/man/Sudo.html#environment
ユーザーを取得する別の方法は、whoコマンドを使用することです。これは、ユーザーがSudoを実行したかどうかを気にしない場合に便利です。
who -m | awk '{print $1;}'
Sudo_USER
は移植性がありません。 Fedora17では設定されていません。
$USER
変数と$UID
変数は、Sudoを呼び出すときにも予測できません。一部のディストリビューションはsudoerを報告し、他のディストリビューションはrootユーザーを報告します。
完璧というわけではありませんが、test -w ~root && echo I have write access to ~root
を使用できます。