Khai báo biến môi trường ở đâu?


59

Địa điểm chính xác cho:

  1. Biến môi trường toàn cầu có nghĩa là ảnh hưởng đến tất cả người dùng?
  2. Biến môi trường cụ thể của người dùng?

Câu trả lời:


16

Tôi nghĩ rằng trang wiki cộng đồng về các biến môi trường sẽ giúp bạn sắp xếp


2
Vấn đề là tài liệu được liên kết bị nhầm lẫn và / hoặc sai hoàn toàn trong một phần của các biến người dùng cụ thể. Tôi vẫn đang cố gắng tìm một cách bất khả tri để làm điều đó. $ HOME / .profile có lẽ là đặt cược tốt nhất ...
Rmano

16
Vui lòng dán văn bản hoặc chụp nhanh nội dung được liên kết - nó có thể không có sẵn trong tương lai!
Nam G VU

4
Trong khi về mặt lý thuyết có thể trả lời câu hỏi, tốt hơn là nên bao gồm các phần thiết yếu của câu trả lời ở đây và cung cấp liên kết để tham khảo.
Thomas Ward

75

Để thêm vào câu trả lời của sagarchalise, tôi có thể tóm tắt những gì liên kết gợi ý là nơi thích hợp cho các cài đặt.

Đối với cài đặt toàn cục, biến môi trường toàn hệ thống

  • Sử dụng /etc/environment
  • Không sử dụng /etc/profilehoặc/etc/bash.bashrc

Từ trang:

/etc/environment[...] đặc biệt có nghĩa là cho các cài đặt biến môi trường toàn hệ thống. Nó không phải là một tập lệnh, mà là bao gồm các biểu thức gán, mỗi biểu thức. Cụ thể, tệp này lưu trữ cài đặt đường dẫn và miền địa phương trên toàn hệ thống.

Sử dụng /etc/profilelà một cách rất hữu ích, nhưng chức năng của nó bị giảm đi rất nhiều trong Ubuntu. Nó chỉ tồn tại để trỏ đến /etc/bash.bashrcvà thu thập các mục từ /etc/profile.d.

Trên hệ thống của tôi, mục nhập thú vị duy nhất trong profile.d là /etc/profile.d/bash_completion.sh.

Đối với cài đặt cục bộ hoặc theo người dùng

Phiên bản trước của trang Ubuntu được khuyến nghị ~/.pam_environment, nhưng trang hiện cho thấy rằng nếu điều đó không hoạt động, bạn nên sử dụng

  • ~/.profile - Đây có lẽ là tệp tốt nhất để đặt các phép gán biến môi trường, vì nó được Trình quản lý hiển thị tự động thực hiện trong phiên máy tính để bàn quá trình khởi động cũng như vỏ đăng nhập khi đăng nhập từ bảng điều khiển văn bản.

  • ~/.bash_profilehoặc ~./bash_login- Nếu một trong số này tồn tại, bash sẽ thực thi nó thay vì ~/.profilekhi bash được bắt đầu như một vỏ đăng nhập. Bash sẽ thích ~/.bash_profileđến ~/.bash_login. [...] Các tệp này sẽ không ảnh hưởng đến phiên đồ họa theo mặc định. "

  • ~/.bashrc - "... có thể là nơi dễ nhất để đặt biến".

1
Chương trình nào đọc /etc/environmentvà khi nào? Nó dường như không hoạt động với cron, ngay cả khi sử dụngSHELL=/bin/bash
SystemParadox 11/03/13

1
Dường như / etc / môi trường là một phần của PAM, có nghĩa là nó sẽ đặt môi trường mặc định cho tất cả các quy trình. cron là đặc biệt (nghĩa là bị hỏng) khi ghi đè cụ thể môi trường này bằng chính nó.
SystemParadox

vậy .bashrc hành xử thế nào? sau bash_profile? thay vì .profile?
khai mạc

1
@opensas Có lẽ bạn nên hỏi như một câu hỏi riêng biệt, tham khảo câu hỏi này hoặc câu trả lời.
belacqua

@belacqua cho phép tôi cần thêm 2 hoặc nhiều biến môi trường để /etc/environmentthích JAVA_HOME="/opt/java" ANT_HOME="/opt/ant" cách thực hiện
Kasun Siyambalapitiya

7

Bạn đã có:

/ etc / profile: tệp .profile trên toàn hệ thống cho shell Bourne (sh (1)) và shell tương thích Bourne (bash (1), ksh (1), ash (1), ...).

mà trong Lucid và Maverick chạy

/etc/profile.d/*.sh

nếu có và nếu vỏ của người dùng bị lỗi:

/etc/bash.bashrc

Đối với môi trường người dùng, có một mảng khó hiểu cụ thể cho shell và liệu nó có được coi là "shell đăng nhập" hay không. Nếu vỏ bị bash:

   ~/.bash_profile
          The personal initialization file, executed for login shells
   ~/.bashrc
          The individual per-interactive-shell startup file

cho sh / dash:

$HOME/.profile

Đối với zsh, tôi thậm chí sẽ không cố gắng để hiểu điều này .


5

Theo khuyến nghị trên https://help.ubfox.com/community/En MôiVariables :

  1. Biến môi trường toàn cầu có nghĩa là ảnh hưởng đến tất cả người dùng nên đi vào /etc/environment.

  2. Các biến môi trường dành riêng cho người dùng nên được đặt trong ~/.pam_environment.

Tránh các tập tin hồ sơ và RC để thiết lập các biến môi trường trên Ubuntu. Họ đã khiến tôi đau đầu hơn giá trị của họ.

Điều này nói dễ hơn làm tuy nhiên;)

Có thể là bạn có thể chạy vào cùng một khoảng cách cấu hình tồn tại đối với tôi. Xem cách giải quyết cho nhà được mã hóa dưới đây.

My ~/.pam_environment:

PATH            DEFAULT=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:${HOME}/bin
IDEA_JDK        DEFAULT=${HOME}/Applications/jdk

Tại sao con đường tĩnh xấu xí? ${PATH}sẽ không làm việc cho tôi. Tôi đã chặn đăng nhập của mình nhiều lần để cố gắng làm việc xung quanh nó để tôi gắn bó với bản sao tĩnh xấu xí của các mặc định :)

Giải pháp cho các thư mục nhà được mã hóa

Trong các bản phát hành Ubuntu lên đến và bao gồm Chính xác 12.04 Beta 2, nếu bạn đang sử dụng một thư mục chính được mã hóa, bạn sẽ cần phải sửa đổi /etc/pam.d/common-sessionđể tải nó ~/.pam_environment. Giải pháp này rõ ràng hoạt động cho các bản phát hành trước đó, nhưng tôi chưa thử nghiệm nó.

Guenther Montag (g-montag) đã viết vào ngày 2010-08-19:

Đây dường như là một vấn đề với các thư mục nhà được mã hóa. Tôi đã thêm

phiên yêu cầu pam_env.so

vào cuối /etc/pam.d/common-session và bây giờ ~ / .pam_en môi trường được đọc. Trên một hệ thống khác không có thư mục nhà được mã hóa (cũng 10.04), công việc xung quanh là không cần thiết. Có lẽ trong trường hợp của tôi, hệ thống cố gắng đọc ~ / .pam_en môi trường trước khi nó được giải mã.

Chuyển thể từ câu trả lời của tôi về Siêu người dùng: https://superuser.com/a/408373/66856


Điều này vẫn sai: ${HOME}sẽ không hoạt động. Không có mở rộng trong .pam_environment.
gièm pha

2
@detly có mở rộng trong .pam_environment, nhưng HOMEthường không được đặt sớm. Nếu dòng đó đã đọc DEFAULT=${PATH}/Applications/jdk, bạn sẽ thấy giá trị PATHđược chèn vào nó.
muru
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.