2012-07-13 10 views
11

के रूप में नहीं मिला है मेरे पास एक लिनक्स बॉक्स पर एक बैश स्क्रिप्ट है जो एक जार फ़ाइल चलाती है। जब नियमित उपयोगकर्ता के रूप में लॉग इन किया मैं स्क्रिप्ट चलाने के लिए अनुमति नहीं है, लेकिन यह निम्न लॉग प्रिंट:JAVA_HOME सुडो

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

जब मैं Sudo हालांकि साथ स्क्रिप्ट का उपयोग करने का प्रयास करें, यह देता है:

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

मैंने ऊपर दिए गए पथ पर JAVA_HOME सेट किया है - इसे echo $JAVA_HOME & के साथ देख सकते हैं इसे स्क्रिप्ट के भीतर एक विकल्प के रूप में भी सेट किया गया है। मुझे खुशी है कि स्क्रिप्ट समस्या नहीं है - यह एक डिफ़ॉल्ट सीक्यू 5 नियंत्रण स्क्रिप्ट & है, मैं इसे बिना किसी मुद्दे के दर्जनों अन्य बक्से पर उपयोग कर रहा हूं। बस यह सुनिश्चित करें कि मैं & से ऊपर गलत क्या कर रहा हूं, मान लीजिए कि मैं कुछ लिनक्स सेट-अप खो रहा हूं?

जब मैं sudo कमांड चलाता हूं, तो क्या इसके पास JAVA_HOME तक पहुंच है जो मैंने स्वयं के रूप में स्थापित की है?

+1

दोनों रूट के रूप में और नियमित उपयोगकर्ता के रूप 'गूंज $ JAVA_HOME' की सटीक उत्पादन क्या है? –

+0

एंड्रयू, मेरे पास मशीन पर रूट उपयोगकर्ता के रूप में पहुंच नहीं है (sysadmin नहीं), बस एक सूडर के रूप में। यद्यपि यहां इस मुद्दे को अभी मिला है: http://unix.stackexchange.com/questions/6127/java-home-not-set-in-script-when-run-using-sudo सुडो पर्यावरण चर को अलग कर रहा था, इसे प्रबंधित किया 'sudo -E' ध्वज – anotherdave

+1

के साथ मेरा मानना ​​है कि यह distro पर निर्भर करता है - कुछ सुडोस envs रखते हैं, अन्य – Raz

उत्तर

24

डिफ़ॉल्ट रूप से, sudo स्पॉन्ड किए गए आदेशों के वातावरण को साफ़ करेगा। दर्रा -E इसे रखने के लिए:

sudo -E env 

से तुलना करें:

sudo env 
+0

धन्यवाद दोस्त नहीं है, बस इसे एक ही समय में unix.stackexchange पर मिला :) – anotherdave

1

जब JAVA_HOME निर्यात नहीं किया गया था "sudo -E" समस्या का समाधान नहीं किया। और जब इसे निर्यात किया गया था, तो "सुडो" बिना -ई काम करता है।

तो आप अपने .bash_profile और .bashrc फ़ाइल में export JAVA_HOME=.../jdk<version> जोड़ सकते हैं।

यदि आपको आश्चर्य हुआ कि .bash_profile और .bashrc का अंतर क्या है, तो bash_profile लॉगिन पर निष्पादित किया जाता है (उदाहरण के लिए, कुछ नैदानिक ​​/ स्वागत जानकारी दिखाएं)। जब आप एक नया टर्मिनल खोलते हैं तो .bash_rc निष्पादित किया जाता है (उदा।, shift-ctrl-T)।

क्रम दोनों ही मामलों के लिए कुछ आदेश चलाने के लिए, आप इसे Bashrc फाइल में रख सकते हैं, और .bash_profile स्रोत .bashrc करते हैं:

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

तुम हमेशा बस इसे जावा के लिए स्पष्ट रूप से इस तरह गुजर सकता है:

sudo java -Djava.home=$JAVA_HOME Test

संबंधित मुद्दे