2010-10-16 14 views
24

का उपयोग कर दूरस्थ मशीन पर एकाधिक आदेश मेरे पास एक दूरस्थ प्रोग्राम पर जावा प्रोग्राम डेस्कटॉप/testfolder/xyz.jar है।शेल स्क्रिप्ट

इसमें एक ही फ़ोल्डर पर एक कॉन्फ़िगरेशन फ़ाइल है। जब मैं मशीन में SSH, मुझे क्या करना:

"ssh [email protected] java -cp Desktop/testfolder/xyz.jar Main"

समस्या यहाँ विन्यास फाइल, रास्ते में नहीं है के रूप में हम घर फ़ोल्डर में हैं तो मेरे कार्यक्रम विन्यास readup नहीं कर सकता है।

तो मैं पहले उस फ़ोल्डर में जाना चाहता हूं और फिर उस फ़ोल्डर से प्रोग्राम चलाता हूं। एक खोल स्क्रिप्ट में अगर मैं इस

"ssh [email protected] cd Desktop/testfolder" 
"java -cp xyz.jar Main" 

किया यह पहले बयान निष्पादित करता है और जब दूसरा बयान चलाया जाता है यह मेरे वर्तमान मशीन रिमोट मशीन नहीं पर चलता है।

क्या हम केवल एक ही आदेश कर सकते हैं या इसके लिए कोई अन्य समाधान हैं?

धन्यवाद, ललित

उत्तर

38

कुछ इस तरह की कोशिश करो पठनीयता की खातिर कई लाइनें, आप आदेशों की सूची bash कमांड को निम्नानुसार पास कर सकते हैं:

ssh [email protected] bash -c "' 
    cd Desktop/testfolder 
    java -cp xyz.jar Main 
'" 
+0

धन्यवाद आपकी दोनों टिप्पणियों में मदद मिली! – Lalith

+5

आपका स्वागत है! ट्रे और मेरा जवाब वही काम करता है जो "काम करता है" कमांड का पहला भाग प्रदान करता है - यदि पहला भाग विफल रहता है तो एंड्रॉइड वाला संस्करण कमांड का दूसरा भाग नहीं करता है। उदाहरण के लिए, 'ssh [email protected] "cd/non-existant; ls -l" '' ssh [email protected] "cd/non-existant && ls -l" 'की तुलना करें। पहले मामले में आपको अभी भी 'ls -l' कमांड से कुछ आउटपुट मिलता है (भले ही' सीडी 'असफल रहा - शायद' आप 'उपयोगकर्ता का घर डीआईआर) और बाद के मामले में' ls -l' कमांड है छोड़ दिया क्योंकि पहला * ऑपरेंड * लौटा * झूठा *। – Robin

+0

'&&' टिप के लिए धन्यवाद। बहुत उपयोगी –

15

आप एक सेमीकोलन द्वारा आदेशों को अलग करने की कोशिश कर सकते:

ssh [email protected] "cd /home && ls -l" 
+25

इन दो ऑपरेटरों के बीच अंतर को ध्यान में रखना महत्वपूर्ण है: ** && ** और **; **। ** && ** मतलब है कि दूसरा आदेश निष्पादित करेगा * अगर, और केवल तभी * पहला आदेश निष्पादित करता है और शून्य के बाहर निकलने की स्थिति (कोई त्रुटि नहीं) के साथ लौटाता है, ** ** ** निम्न आदेश को इसके बावजूद निष्पादित करने की अनुमति देता है बाहर निकलें स्थिति। – earthmeLon

+0

यह ध्यान देने योग्य भी है कि स्ट्रिंग में एक नई लाइन की अनुमति है जहां आपके पास अर्धविराम है। (हां, [नियमित तार 'sh'] में कई लाइनों का विस्तार कर सकते हैं (http://stackoverflow.com/a/9140181/874188) और डेरिवेटिव, बिना किसी अतिरिक्त वाक्यविन्यास के।) – tripleee

3

तुम पर अपने आदेश को विभाजित करना चाहते हैं:

ssh [email protected] "cd Desktop/testfolder ; java -cp xyz.jar Main" 
संबंधित मुद्दे