Câu trả lời:
Theo truyền thống, nơi để xác định các biến môi trường theo người dùng trên các hệ thống unix là ~/.profile
. Tệp này được đọc bởi shell đăng nhập (tức là chương trình được khởi động khi bạn đăng nhập và bạn có thể nhập lệnh vào), với điều kiện shell đăng nhập là shell tương thích Bourne.
Bash là một vỏ tương thích Bourne. Khi nó được gọi dưới dạng shell đăng nhập sẽ đọc ~/.bash_profile
nếu tệp này tồn tại và ~/.profile
nếu ~/.bash_profile
không tồn tại.
Theo nguyên tắc thông thường, nếu bạn nhập mật khẩu của mình ở chế độ văn bản (ví dụ: trên bảng điều khiển văn bản hoặc từ xa bằng ssh), thì vỏ bạn nhận được là vỏ đăng nhập.
Tuy nhiên, nếu bạn nhập mật khẩu của mình vào một chương trình đồ họa và được đăng nhập vào môi trường đồ họa, điều này sẽ bỏ qua lớp vỏ đăng nhập bình thường. Việc .profile
có được đọc trong trường hợp này hay không phụ thuộc vào cách thiết lập phiên đồ họa; chẳng hạn, nó khác nhau giữa các bản phân phối Linux, giữa các trình quản lý hiển thị và giữa các môi trường máy tính để bàn. Đôi khi một trong các chương trình trong chuỗi gọi rõ ràng trình đăng nhập; đôi khi một trong những chương trình đọc rõ ràng ~/.profile
; và đôi khi không có điều này xảy ra và ~/.profile
không được đọc.
Để đưa ra một ví dụ về tính biến đổi, theo như tôi có thể biết từ cái nhìn nhanh về các tập lệnh liên quan, trên Ubuntu 10.04: nếu bạn đăng nhập bằng kdm hoặc lxdm, ~/.bash_profile
hãy đọc nếu nó tồn tại, và ~/.profile
nếu không; nếu bạn đăng nhập bằng gdm, chỉ ~/.profile
được đọc; nếu bạn đăng nhập bằng xdm, ~/.profile
sẽ không được đọc.
Tất cả các hệ thống tôi biết cung cấp một số cách thiết lập các biến môi trường cho mỗi người dùng. Thật không may, không có câu trả lời chung chung.
Lưu ý rằng đôi khi bạn sẽ thấy các đề xuất để đặt các biến môi trường ~/.bashrc
hoặc bắt đầu một vỏ đăng nhập trong mỗi thiết bị đầu cuối trong môi trường GUI. Cả hai đều là những ý tưởng tồi; một trong những lý do là vấn đề bạn gặp phải, cụ thể là các biến môi trường của bạn chỉ có sẵn trong các chương trình được bắt đầu qua thiết bị đầu cuối và không có trong các chương trình được khởi động trực tiếp bằng biểu tượng hoặc menu hoặc phím tắt.
.profile
được đọc khi bạn đăng nhập. Đưa các biến môi trường vào .bashrc
không hoạt động và kịch bản của bạn minh họa rằng: ứng dụng (có lẽ là GUI) chạy shell này sẽ có các biến môi trường của bạn, nhưng nếu bạn xác định chúng .bashrc
, thì nó không ' t.
Câu trả lời dứt khoát nằm trong phần trang bash man trên Bash Startup Files . "Khi một vỏ tương tác không phải là vỏ đăng nhập được khởi động, Bash đọc và thực thi các lệnh từ ~ / .bashrc, nếu tệp đó tồn tại."
Trả lời các câu hỏi khác của bạn chỉ ra rằng eshell không thực sự chạy bash
. Emacs eshell
thì không bash
. Giả sử rằng eshell
tải sẽ .bashrc
bị lỗi như giả định zsh
hoặc csh
sẽ tải .bashrc
. Đó là một cái vỏ khác.
Tôi thấy hai lựa chọn:
bash
và mã elisp cho eshell
.Bạn cũng có thể quan tâm đến cuộc thảo luận về việc thêm một thư mục vào một đường dẫn mà không trùng lặp .
Đặt PATH của bạn trong ~ / .profile của bạn sẽ hoạt động. Tập tin đó được đọc khi đăng nhập bởi mọi shell tương thích POSIX hoặc Bourne mà tôi biết bao gồm cả bash. Nếu bạn thay đổi tập tin đó, bạn sẽ phải đăng xuất và đăng nhập lại để những thay đổi có hiệu lực. Vì PATH là một phần của môi trường quá trình đăng nhập của bạn, nên nó sẽ được xuất sang mọi shell mà bạn bắt đầu sau đó.