.bashrc
là 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 .bashrc
không liên quan.
sudo su; echo $PATH
chạ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 $PATH
mộ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 $PATH
tạ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 .bashrc
cho 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_environment
hoặc ~/.profile
.
Vì vậy, thiết lập PATH
trong .profile
thay 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 .profile
với sudo sh -c '. ~/.profile; echo $PATH'
.