.bashrc
インタラクティブに実行された場合のみ、bashの構成ファイルです。sh
(bashがnameを介して呼び出された場合でも)などの他のプログラムを実行したときではなく、bashを起動したときにのみロードされますsh
。また、bashがインタラクティブな場合にのみロードされ、スクリプトまたはコマンドを使用してを実行する場合にはロードされません-c
。
sudo sh -c 'echo $PATH'
またはsudo bash -c 'echo $PATH'
対話型シェルを起動しないため、.bashrc
関与しません。
sudo su; echo $PATH
ルートのシェルの対話型インスタンスを実行します。それ~root/.bashrc
がbashの場合、ロードされます。このスニペットはecho $PATH
、この対話型シェルが終了すると実行されるため、対話型シェルで発生することは、スニペットが最後に出力する内容に影響しません。ただし、echo $PATH
によって起動された対話型シェルのプロンプトで入力すると、によってsudo su
設定された値が表示され~root/.bashrc
ます。
以来.bashrc
、各対話型シェルでは、ありません(bashで設計の欠陥ではないとしても、対話型ログインシェルによって、)ログインシェルによって呼び出され、それは環境変数を定義するために、間違った場所です。つかいます.bashrc
キーバインディング、エイリアス、補完設定などのインタラクティブなbash設定にします。ログイン時にロードされるファイルに環境変数を設定します:~/.pam_environment
または~/.profile
。
そのためPATH
、の.profile
代わりにを設定し.bashrc
、でログインシェルを実行するかsudo -i 'echo $PATH'
、で明示的にソース.profile
を実行しますsudo sh -c '. ~/.profile; echo $PATH'
。