sudo コマンドは /root/.bashrc をソースしません。

sudo コマンドは /root/.bashrc をソースしません。

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.bashrcsudo -i 'echo $PATH'.profilesudo sh -c '. ~/.profile; echo $PATH'

おすすめ記事