Những tập tin thiết lập nào nên được sử dụng để thiết lập các biến môi trường với bash?


9

Như tôi đã hỏi và nhận được câu trả lời ở đây , và ở đây , biến PATH có các tên đường dẫn khác nhau tùy thuộc vào cách ứng dụng được kích hoạt.

  • Những tập tin thiết lập nào (.bashrc, .profile, ...) nên được sử dụng để có cùng biến PATH cho dù tôi khởi động phần mềm bằng bash như thế nào?

Câu trả lời:


15

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_profilenếu tệp này tồn tại và ~/.profilenếu ~/.bash_profilekhô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 .profilecó đượ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à ~/.profilekhô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_profilehãy đọc nếu nó tồn tại, và ~/.profilenế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, ~/.profilesẽ 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 ~/.bashrchoặ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.


Một số ứng dụng gọi shell không đăng nhập tương tác, có nghĩa là .profile và .bash_profile không đọc. Nếu bạn muốn đặt env vars cho các ứng dụng đó, một cách để làm là đặt chúng trong .bashrc mặc dù đó không phải là nơi dành cho nó; xem github.com/mobile-shell/mosh/issues/102#issuecomment-12503646
William

@William .profileđược đọc khi bạn đăng nhập. Đưa các biến môi trường vào .bashrckhô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.
Gilles 'SO- ngừng trở nên xấu xa'

mosh không phải là GUI, nó là một thay thế cho ssh. Tôi không bảo vệ hành vi của mình, chỉ cố gắng giúp đỡ những người khác gặp phải vấn đề tương tự mà tôi và những người khác gặp phải, như được mô tả trong vấn đề Github mà tôi liên kết.
William

2

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 eshellthì không bash. Giả sử rằng eshelltải sẽ .bashrcbị lỗi như giả định zshhoặc cshsẽ tải .bashrc. Đó là một cái vỏ khác.

Tôi thấy hai lựa chọn:

  1. Tạo tập lệnh của riêng bạn, trong đó có một danh sách các thư mục và tạo mã bash thích hợp cho bashvà mã elisp cho eshell.
  2. Đặt biến môi trường ESHELL hoặc SHELL của bạn để bạn thực sự chạy bash trong emacs. Đó là những gì tôi làm. Bash hoạt động tốt trong emacs.

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 .


1

Đặ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 đó.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.