sudo su したときの環境変数と、自分の環境変数がどうなってるのか知りたい。
sudo su -l したときの環境変数と sudo su の環境変数がどうなっているのか知りたい。
rvm で環境作ってると、環境変数を意識しておかないとgem install しても入ってなかったり。そんなことが起きて環境ぐちゃぐちゃになるのでちゃんと意識しておきたいと思った。
調べてみた。
とにかく調べてみるのが一番。
sudo su -l したときの環境変数と sudo su の環境変数
左がsudo su -l の環境変数 。右がsudo suの環境変数
pwdが違うのは、新しいシェルを起動したときにhomeへ移動したかどうかの違い
-l つけると新しいbashが起動するみたい。
環境変数がリセットされるのは重要
とくに、rvmなどのユーザ固有ローカルパッケージを使っていて、システム環境を触るときに重要。
sudoしたときに環境変数を持ち越すかどうか
sudoしたとき環境変数がリセットされてるのは、次のsudoersファイルの設定の効果
sudoersの設定で環境変数をリセットして初期化して sudo しているのが分かる。
su -l の -l オプション
Macのmanには次のように書いてあった。
-l Simulate a full login. The environment is discarded except for HOME, SHELL, PATH, TERM, and USER. HOME and SHELL are modified as above. USER is set to the target login. PATH is set to ``/bin:/usr/bin''. TERM is imported from your current environment. The invoked shell is the target login's, and su will change directory to the target login's home directory.
su の -l オプションではなく "-" を使う
DebianのManには次のように書いてあった。
su はログインセッション中に別のユーザになるために用いる。 ユーザ名を指定せずに起動した場合、
デフォルトではスーパーユーザの ID に変更する。
オプション引数 - を用いると、 直接ログインした場合と同じ環境に初期化される。
というわけで、「su - 」でもおなじらしい