sudoを使用してシェルスクリプトを実行した場合、正しい$ USERを取得するにはどうすればよいですか?
Macインストールパッケージでインストール後のスクリプトとして実行し、自動的にsudoされますが、ユーザー名を使用して何かを行う必要があります。
ただし、$HOMEは正しいです。エレガントでない方法は、ホームパスから名前を抽出することですが、これを行う自然な方法があるのではないかと思います。
インストーラー内の自動呼び出しであるため、スクリプトの呼び出し方法に影響を与えることはできません。
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ポータブルではありません。Fedora 17 では未設定です。
$USERおよび変数は、$UIDsudo を呼び出すときにも予測できません。sudoer を報告するディストリビューションもあれば、root ユーザーを報告するディストリビューションもあります。
決して完璧ではありませんが、使用できますtest -w ~root && echo I have write access to ~root。