Kiếm $ JAVA_HOME dễ dàng thay đổi trong Ubuntu [đã đóng]


139

Trong Ubuntu, tôi muốn chuyển đổi biến môi trường JAVA_HOME của mình qua lại giữa Java 5 và 6.

Tôi mở một thiết bị đầu cuối và gõ vào phần sau để đặt biến môi trường JAVA_HOME:

export JAVA_HOME=/usr/lib/jvm/java-1.5.0-sun

Và trong cùng cửa sổ terminal, tôi gõ như sau để kiểm tra xem biến môi trường đã được cập nhật chưa:

echo $JAVA_HOME

Và tôi thấy /usr/lib/jvm/java-1.5.0-sun đó là những gì tôi đang mong đợi để xem. Ngoài ra, tôi sửa đổi ~ / .profile và đặt biến môi trường JAVA_HOME thành /usr/lib/jvm/java-1.5.0-sun.

Và bây giờ là vấn đề - khi tôi mở một cửa sổ terminal mới và tôi kiểm tra biến môi trường JAVA_HOME của mình bằng cách gõ vào echo $ JAVA_HOME Tôi thấy rằng biến môi trường JAVA_HOME của tôi đã được hoàn nguyên về Java 6. Khi tôi khởi động lại máy của mình (hoặc đăng nhập ra và vào lại, tôi cho rằng) biến môi trường JAVA_HOME được đặt thành Java 5 (có lẽ là do sửa đổi tôi đã thực hiện trong ~ / .profile).

Có cách nào khác để tôi có thể thay đổi môi trường JAVA_HOME của mình mà không cần phải đăng xuất và quay lại (VÀ làm cho biến môi trường đó thay đổi dính trong tất cả các cửa sổ đầu cuối mới)?


29
Trang web chính xác và câu trả lời trùng lặp là gì?
Martin Konicek

Các ~/.profiletập tin được chỉ đọc khi bạn đăng nhập vào Ubuntu, vì vậy nếu bạn logout / login sau đó JAVA_HOME được thiết lập cho tất cả các thiết bị đầu cuối và các ứng dụng khác mà bạn chạy. Nếu bạn đặt JAVA_HOME, ~/.bashrcnó sẽ chỉ được nhìn thấy bởi các ứng dụng chạy từ thiết bị đầu cuối.
jr0cket

Câu trả lời:


196

Đặt các biến môi trường vào /etc/environmenttệp toàn cầu :

...
export JAVA_HOME=/usr/lib/jvm/java-1.5.0-sun
...

Thực thi "nguồn / etc / môi trường" trong mọi shell nơi bạn muốn các biến được cập nhật:

$ source /etc/environment

Kiểm tra xem nó hoạt động:

$ echo $JAVA_HOME
$ /usr/lib/jvm/java-1.5.0-sun

Tuyệt vời, không cần đăng xuất.

Nếu bạn muốn đặt biến môi trường JAVA_HOME chỉ trong thiết bị đầu cuối, hãy đặt nó trong tệp ~ / .bashrc .


9
Vẫn cần phải khởi động lại để những thay đổi này ảnh hưởng đến các ứng dụng được khởi chạy thông qua Giao diện người dùng Ubuntu (tức là nhấp đúp vào một ứng dụng)
Eric Hu

7
Điều này khác biệt như thế nào so với việc chỉ đặt biến trong mỗi vỏ của friggin?
mlissner

1
một cách khác để không phải chạy thủ công mỗi lần là sửa đổi tệp .bashrc của bạn để bao gồm lệnh "source / etc / môi trường"
nityan

1
@MartinKonicek ví dụ của bạn không chính xác. không nên có "xuất khẩu" trên dòng đó. / etc / môi trường chứa các cặp giá trị chính
pdeva

1
Hãy nhớ rằng đó /etc/environmentlà đặc biệt và không cho phép thay thế, ví dụ như JRE_HOME=${JAVA_HOME}/jresẽ không hoạt động.
Abdull

31

Điều này có thể sẽ giải quyết vấn đề của bạn: https://help.ubfox.com/community/EnvirVariables

Biến môi trường toàn phiên

Để đặt các biến môi trường theo cách ảnh hưởng đến môi trường của một người dùng cụ thể, người ta không nên đặt các lệnh để đặt giá trị của chúng trong các tệp script shell cụ thể trong thư mục chính của người dùng, nhưng sử dụng:

~ / .pam_en môi trường - Tập tin này đặc biệt có nghĩa là để thiết lập môi trường của người dù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.

Không được khuyến khích:

~ / .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 DisplayManager 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.


Từ liên kết mà bạn cung cấp: "dưới đây không được khuyến khích nhưng các giải pháp trước đây được cung cấp trên trang này không làm việc với việc phát hành 10,04 desktop .pam_environment không tự nhiên chế biến không qua với sự phân bố (?).."
Calmarius

14
~ / .pam_en môi trường là một cách tuyệt vời để gạch đăng nhập của bạn nếu bạn giả sử nó xử lý các biến. Tôi đã thử đặt PATH thành $ {PATH}: $ {HOME} / bin và không thể đánh giá các biến. Kết quả ròng: không thể đăng nhập :( Đã sửa bằng cách truy cập Ctrl-Alt-1 và chạy "/ bin / rm ~ / .pam_en môi trường". Đặc biệt cẩn thận hoặc sử dụng tài khoản phụ để kiểm tra cài đặt tại đây.
Alain O'Dea

6
Cá nhân tôi không biết tại sao họ lại bận tâm tạo tệp môi trường và sau đó nó hoạt động theo một cách hoàn toàn khác so với bất kỳ cơ chế nào khác để thiết lập các biến môi trường từng hoạt động trước đây. Các cặp giá trị khóa đơn giản như tệp môi trường sử dụng là BS đơn giản. Có một lý do chúng tôi sử dụng các biến và liên kết trong môi trường và nó vẫn có giá trị ngày nay. Nó đơn giản hóa quản trị. Bất cứ ai là bozos là người quyết định cách làm PAM trong tập tin này là tốt nhất đều là những người ngu ngốc nhất. Các biến CẦN phải được giải thích.
Bill Rosmus

1
@ AlainO'Dea: Tôi có cùng một vấn đề. Sốc và lo lắng khi tôi không thể vượt qua màn hình đăng nhập. Sau khi đào xung quanh tôi thấy rằng bạn có thể sử dụng các biến nhưng phải sử dụng một cú pháp khác. ví dụ. PATH DEFAULT = $ {PATH}: $ {HOME} / bin Khi không sử dụng biến, một phép gán đơn giản dường như hoạt động.
tim_wonil

Có, tôi đồng ý với @ AlainO'Dea. Nếu có bất kỳ lỗi nào trong tập lệnh của bạn, bạn sẽ không thể đăng nhập. Bảo trọng.
Evan Hu

13

Hãy thử các bước sau.

- Chúng tôi sẽ chỉnh sửa "etc \ profile". Các biến môi trường sẽ được nhập ở dưới cùng của tệp. Vì Ubuntu không cấp quyền truy cập vào thư mục gốc, chúng tôi sẽ phải sử dụng một vài lệnh trong thiết bị đầu cuối

Bước 1: Bắt đầu thiết bị đầu cuối. Nhập lệnh:gksudo gedit /etc/profile

Bước2: Tệp văn bản hồ sơ sẽ mở. Nhập các biến môi trường ở dưới cùng của trang ........... Ví dụ: export JAVA_HOME=/home/alex/jdk1.6.0_22/bin/java

export PATH=/home/alex/jdk1.6.0_22/bin:$PATH

bước 3: lưu và đóng tệp. Kiểm tra xem các biến môi trường có được đặt bằng cách sử dụng lệnh echo ........ Eg echo $PATH


9

Bạn cần đặt định nghĩa biến trong ~/.bashrctệp.

Từ trang bash man:

Khi một vỏ tương tác không phải là vỏ đăng nhập được khởi động, bash sẽ đọc và thực thi các lệnh từ /etc/bash.bashrc và ~ / .bashrc, nếu các tệp này tồn tại.


5

Theo truyền thống, nếu bạn chỉ muốn thay đổi biến trong các cửa sổ đầu cuối của mình, hãy đặt nó trong .bashrctệp, có nguồn gốc mỗi khi một thiết bị đầu cuối mới được mở. .profiletập tin không có nguồn gốc mỗi khi bạn mở một thiết bị đầu cuối mới.

Xem sự khác biệt giữa .profile và .bashrc trong câu hỏi: Sự khác biệt giữa .bashrc, .bash_profile và .en môi trường là gì?

.bashrcnên giải quyết vấn đề của bạn. Tuy nhiên, nó không phải là giải pháp thích hợp vì bạn đang sử dụng Ubuntu. Xem trang trợ giúp Ubuntu có liên quan " Biến môi trường toàn phiên ". Vì vậy, không có gì lạ khi .profilenó không làm việc cho bạn. Tôi sử dụng Ubuntu 12.04 và xfce. Tôi thiết lập của tôi .profilevà nó chỉ đơn giản là không có hiệu lực ngay cả khi tôi đăng xuất và đăng nhập. Kinh nghiệm tương tự ở đây . Vì vậy, bạn có thể phải sử dụng.pam_environment tập tin và hoàn toàn quên đi .profile, và .bashrc. Và LƯU Ý đó .pam_environmentkhông phải là một tập tin kịch bản.




1

Sau khi thực hiện các thay đổi thành .profile, bạn cần thực thi tệp để các thay đổi có hiệu lực.

root@masternode# . ~/.profile

Một khi điều này được thực hiện, lệnh echo sẽ hoạt động.


Bạn nên sử dụng ~/.profilechứ không phải ./.profile.
Alexis Wilke
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.