sudoで実行しているときにシェルスクリプト内で$ USERを取得しますか?
-
06-07-2019 - |
質問
sudoでシェルスクリプトを実行する場合、正しい$ USERを取得するにはどうすればよいですか?
Macインストールパッケージでpostinstallスクリプトとして実行します。これらは自動的にsudo-edされますが、ユーザー名を使用する必要があります。
ただし、$ 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
および $ UID
変数は、sudoを呼び出すときに予測できません。一部のディストリビューションはsudoerを報告し、他のディストリビューションはrootユーザーを報告します。
完全ではありませんが、 test -w〜root&&を使用できます。 echo〜root
への書き込みアクセス権があります。