PATH
/root/.bashrc ファイルの変数にカスタムパスを追加しました。
これにより、sudo su; echo $PATH
「/path/to/custom/bins」エントリが表示されます。
しかし、私はそうですsudo sh -c 'echo $PATH'
。
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
.bashrcファイルに追加されたフォルダパスは表示されません。
sudoコマンドはrootユーザーと同じ環境を持っていませんか?
ベストアンサー1
.bashrc
これはbashの設定ファイルであり、対話型で実行されている場合にのみ有効です。これはbashを起動したときにのみロードされ、他のプログラムを実行してもロードされませんsh
(たとえば、bashを名前で呼び出すsh
)。そしてbashがインタラクティブであるときにのみロードされ、スクリプトを実行したり-c
。
sudo sh -c 'echo $PATH'
または、sudo bash -c 'echo $PATH'
インタラクティブシェルが呼び出されないため、.bashrc
関連しません。
sudo su; echo $PATH
ルートシェルの対話型インスタンスを実行します。 bashなら既に~root/.bashrc
ロードされています。このコードスニペットはインタラクティブシェルの終了時に実行されるため、インタラクティブ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'