私はuser1
というユーザーがいて、その.bash_profile
に変更を加えています。その1つがPATH
を変更しています。例:export PATH=/some/place:$PATH
。 user1
としてログオンするか、su - user1
を実行すると、この変更は正常に機能します。
しかし、su
をroot
としてコマンドを実行しようとすると、たとえば、次のようになります。
su -c test.sh Oracle
(テストにはecho $PATH
が含まれます)
変更されたPATH
(またはrootのPATH
)はないようです。 .bash_profile
を.profile
にコピーしてみたが、役に立たなかった。
なぜこうなった?
su
を-l
または-
なしで使用すると、bash
は対話型ではありますが、非ログインシェルとして開始されます。これは、指定したファイルのどちらからも読み取りません。 -l
または-
オプションを使用するか、関連する構成を/root/.bashrc
に入れます。
設定ファイルの概要:
-l
/--login
)は、最初に/etc/profile
を読み取り、次に~/.bash_profile
、~/.bash_login
、および~/.profile
を最初に検出します。-i
)は、/etc/bash.bashrc
と~/.bashrc
をこの順序で読み取ります(--rcfile
オプションが使用されており、他の場所を探すように指示している場合を除く)。-l
または-i
フラグを使用せずに別のプログラム内から開始した場合、BASH_ENV
環境変数で指定されたファイルを読み取ります。sh
として実行すると、/etc/profile
と~/.profile
をこの順序で読み取ります。sh
として実行すると、ENV
で指定されたファイルを読み取ります。Bashの動作は、ログインシェル、つまりシステムにログオンしたときに最初に実行されるシェルであると信じているかどうかによって異なります。ログインシェルの場合、.bash_profile
のみを読み取ります。代わりにPATH
を変更するコードを.bashrc
に入れると、ログインシェルだけでなく、すべてのインタラクティブbashシェルに対して実行されます。
Scientific Linux 6(またはおそらくRHEL 6)でGnome環境を使用している場合は、ターミナルを起動します。 Edit
-> Profile Preferences
-> "Title and Command"
タブに移動します。 「ログインシェルとしてコマンドを実行する」チェックボックスがチェックされていることを確認してください。これを行わない限り、Gnome端末アプリケーションが.bash_profile
を無視していることがわかりました。