.bashrclà một tệp cấu hình của bash, chỉ khi nó được thực thi tương tác. Nó chỉ được tải khi bạn bắt đầu bash, không phải khi bạn chạy một số chương trình khác, chẳng hạn như sh(ngay cả khi bash được gọi thông qua tên sh). Và nó chỉ được tải khi bash tương tác, không phải khi nó thực thi tập lệnh hoặc lệnh -c.
sudo sh -c 'echo $PATH'hoặc sudo bash -c 'echo $PATH'không gọi vỏ tương tác, vì vậy .bashrckhông liên quan.
sudo su; echo $PATHchạy một ví dụ tương tác của shell root. Nếu đó là bash, sau đó ~root/.bashrcđược tải. Đoạn mã này thực thi echo $PATHmột khi lớp vỏ tương tác này chấm dứt, do đó, bất cứ điều gì xảy ra trong lớp vỏ tương tác đều không ảnh hưởng đến những gì đoạn trích được in ở cuối. Nhưng nếu bạn gõ echo $PATHtại dấu nhắc của trình vỏ tương tác được bắt đầu bởi sudo su, bạn sẽ thấy giá trị được đặt bởi ~root/.bashrc.
Vì .bashrcđược gọi trong mỗi shell tương tác, không phải bởi shell đăng nhập (thậm chí không phải bởi shell đăng nhập tương tác, là lỗi thiết kế trong bash), nên đó là vị trí sai để xác định các biến môi trường. Sử dụng .bashrccho các cài đặt bash tương tác như các ràng buộc chính, bí danh và cài đặt hoàn thành. Đặt các biến môi trường trong các tệp được tải khi bạn đăng nhập: ~/.pam_environmenthoặc ~/.profile.
Vì vậy, thiết lập PATHtrong .profilethay vì .bashrc, và một trong hai chạy một shell đăng nhập với sudo -i 'echo $PATH', hoặc một cách rõ ràng nguồn .profilevới sudo sh -c '. ~/.profile; echo $PATH'.