web-dev-qa-db-ja.com

suの実行時に.bash_profileが読み込まれない

私はuser1というユーザーがいて、その.bash_profileに変更を加えています。その1つがPATHを変更しています。例:export PATH=/some/place:$PATHuser1としてログオンするか、su - user1を実行すると、この変更は正常に機能します。

しかし、surootとしてコマンドを実行しようとすると、たとえば、次のようになります。

su -c test.sh Oracle

(テストにはecho $PATHが含まれます)

変更されたPATH(またはrootのPATH)はないようです。 .bash_profile.profileにコピーしてみたが、役に立たなかった。

なぜこうなった?

41
NullUser

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で指定されたファイルを読み取ります。
62
Kevin

Bashの動作は、ログインシェル、つまりシステムにログオンしたときに最初に実行されるシェルであると信じているかどうかによって異なります。ログインシェルの場合、.bash_profileのみを読み取ります。代わりにPATHを変更するコードを.bashrcに入れると、ログインシェルだけでなく、すべてのインタラクティブbashシェルに対して実行されます。

5
Kyle Jones

Scientific Linux 6(またはおそらくRHEL 6)でGnome環境を使用している場合は、ターミナルを起動します。 Edit-> Profile Preferences-> "Title and Command"タブに移動します。 「ログインシェルとしてコマンドを実行する」チェックボックスがチェックされていることを確認してください。これを行わない限り、Gnome端末アプリケーションが.bash_profileを無視していることがわかりました。

0
Andrew