web-dev-qa-db-ja.com

sudoで実行しているときにシェルスクリプト内で$ USERを取得しますか?

Sudoでシェルスクリプトを実行した場合、正しい$ USERを取得するにはどうすればよいですか?

Macインストールパッケージでインストール後のスクリプトとして実行し、自動的にSudoされますが、ユーザー名を使用して何かを行う必要があります。

ただし、$ HOMEは正しいです。エレガントでない方法は、ホームパスから名前を抽出することですが、これを行う自然な方法があるのではないかと思います。

スクリプトはインストーラー内の自動呼び出しであるため、スクリプトの呼び出し方法に影響を与えることはできません。

34
Jörg Haubrichs

私のシステムでは、変数$Sudo_USERが呼び出し元のユーザー名に設定されています。

${HOME}変数からユーザー名を直接抽出しないでください。構成中であり、計算されていません。ユーザー名を抽出するには、/etc/passwdファイルを調べることができますが、これはシステムに大きく依存します。 LDAPディレクトリを調べる必要がある場合や、エントリがNISを介して伝播される場合があります...

35
dz.

$(logname)を使用できます。これにより、現在sudoしている場合でもログイン名が返されます。

23
Gauthier

変数Sudo_USERを調べます。

http://www.gratisoft.us/Sudo/man/Sudo.html#environment

ユーザーを取得する別の方法は、whoコマンドを使用することです。これは、ユーザーがSudoを実行したかどうかを気にしない場合に便利です。

who -m | awk '{print $1;}'
18
brianegge

Sudo_USERは移植性がありません。 Fedora17では設定されていません。

$USER変数と$UID変数は、Sudoを呼び出すときにも予測できません。一部のディストリビューションはsudoerを報告し、他のディストリビューションはrootユーザーを報告します。

完璧というわけではありませんが、test -w ~root && echo I have write access to ~rootを使用できます。

9
Jim S.