2012-07-13 30 views
11

Tôi có tập lệnh bash trên hộp Linux chạy tệp Jar. Khi đăng nhập như một người dùng bình thường tôi không có sự cho phép để chạy các kịch bản, nhưng nó in nhật ký sau đây:JAVA_HOME không được tìm thấy dưới dạng Sudo

*INFO * Using JVM found at /opt/jdk6/bin/java 

Khi tôi cố gắng sử dụng kịch bản với Sudo tuy nhiên, nó mang lại:

*ERROR* Unable to locate java, please make sure java is installed and JAVA_HOME set 

Tôi đã đặt JAVA_HOME thành cùng một đường dẫn ở trên - có thể xem bằng echo $JAVA_HOME & cũng được đặt làm tùy chọn trong tập lệnh. Tôi rất vui vì tập lệnh không phải là vấn đề - đó là tập lệnh kiểm soát CQ5 mặc định & Tôi đang sử dụng tập lệnh này trên hàng tá hộp khác mà không gặp sự cố. Chỉ cần không chắc chắn những gì tôi đang làm sai trên & giả sử đó là một cái gì đó tôi đang thiếu thiết lập lại Linux?

Khi tôi chạy lệnh sudo, nó có quyền truy cập vào số JAVA_HOME mà tôi tự thiết lập không?

+1

Đầu ra chính xác của 'echo $ JAVA_HOME' là gốc và người dùng thông thường là gì? –

+0

Andrew, tôi không có quyền truy cập như là người dùng root chính nó trên máy tính (không phải là sysadmin), giống như một sudoer. Chỉ tìm thấy vấn đề ở đây mặc dù: http://unix.stackexchange.com/questions/6127/java-home-not-set-in-script-when-run-using-sudo Sudo đã loại bỏ biến môi trường, quản lý nó với 'sudo -E' cờ – anotherdave

+1

Tôi tin rằng nó phụ thuộc vào distro - một số sudos giữ envs, những người khác không – Raz

Trả lời

24

Theo mặc định, sudo sẽ xóa môi trường của các lệnh được sinh ra. Vượt qua -E để giữ cho nó:

sudo -E env 

So sánh với:

sudo env 
+0

Cảm ơn bạn đời, chỉ cần tìm thấy nó trên unix.stackexchange cùng một lúc :) – anotherdave

1

"sudo -E" không giải quyết vấn đề khi JAVA_HOME không được xuất khẩu. Và khi nó được xuất khẩu, "sudo" mà không có -E hoạt động như nhau.

Vì vậy, bạn có thể thêm export JAVA_HOME=.../jdk<version> vào tệp .bash_profile và .bashrc của mình.

Trong trường hợp bạn tự hỏi sự khác biệt của .bash_profile và .bashrc, .bash_profile được thực hiện khi đăng nhập (ví dụ: hiển thị một số thông tin chẩn đoán/chào mừng). .bash_rc được thực hiện khi bạn mở một thiết bị đầu cuối mới (ví dụ: shift-ctrl-T).

Để chạy một số lệnh cho cả hai trường hợp, bạn có thể đặt nó trong tập tin .bashrc, và để cho nguồn .bash_profile .bashrc:

if [ -f ~/.bashrc ]; then 
    source ~/.bashrc 
fi 
0

Bạn luôn có thể chỉ cần vượt qua nó để java một cách rõ ràng như thế này:

sudo java -Djava.home=$JAVA_HOME Test

Các vấn đề liên quan