web-dev-qa-db-ja.com

Sudo suを実行する場合でも、すべてのユーザーに環境変数を設定するにはどうすればよいですか?

ディレクトリx.sh/etc/profile.d/という名前のファイルを作成したため、すべてのユーザーがアクセスできるはずです。コマンドSudo su other_userを使用して(ログインしているユーザーの)ターミナルで現在のユーザーを変更すると、x.shファイルで設定した変数にアクセスできるはずですが、アクセスできません。希望どおりに変数にアクセスできるように設定するにはどうすればよいですか?

3

/etc/profile(したがって/etc/profile.d)はログインシェル用に読み取られます。 Sudo su other_userはログインシェルを実行しません。これは悪い習慣であり、環境を残します 元のユーザーからの変数で汚染されています 。代わりに、次のコマンドのいずれかを実行する必要があります。

Sudo -iu other_user
Sudo su - other_user

これらは両方ともログインシェルを起動するため/etc/profileをロードし、どちらも比較的クリーンな環境で起動します。

ただし、理想的には、可能であれば変数を/etc/environmentに設定する必要があります。そのファイルsuによって読み取られるべきです。したがって、ログインシェルが開始されたかどうかに関係なく、そこにある変数が利用可能になります。ただし、そのファイルはシェル構文をサポートしていないため、変数を設定するために複雑なシェルコードが必要な場合は使用できません。

5
Olorin

続く 環境変数を永続的に設定する方法・U&Lbashがロードされます

/etc/profile

すべてのユーザーに効果的な変数を追加する適切な場所です。

2
dessert