.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'。