SSH और निष्पादित कमांड


0

मैं एक सर्वर में ssh और होस्ट पर कई कमांड निष्पादित करने का प्रयास कर रहा हूं।

मैं निम्नलिखित के साथ करने में कामयाब रहा और यह पूरी तरह से काम करता है

ssh -t -X thor 'cd /stmp/username; ls -rtl ; rm ~/tmp.file; tcsh -l'

वर्तमान में, मैं / stmp / username / में सूचीबद्ध नवीनतम फ़ोल्डर में निर्देशिका को बदलने के लिए कमांड का विस्तार करने की कोशिश कर रहा हूं

सबसे पहले, मैंने उस कमांड का परीक्षण किया जिसे मैं टर्मिनल में उपयोग करना चाहता था और यह काम करता है। यह डायरेक्टरी लिस्टिंग में लेटेस्ट फोल्डर में जाएगा। आज्ञा है

cd `ls -rtl | cut -d' ' -f9 | tail -1`

अब मैं उपरोक्त कमांड को ssh कमांड में संयोजित करने का प्रयास कर रहा हूं। लेकिन यह काम नहीं करता है।

ssh -t -X thor 'cd /stmp/username; cd `ls -rtl |cut -d' ' -f9 | tail -1` ; rm ~/tmp.file; tcsh -l'

क्या मेरी आज्ञा में कुछ गड़बड़ है?


आपके पास 2-सेट हैं एकल कोट , कमांड को डबल-कोट्स में लपेटें, उदा। ssh -t -X thor "cd ... " अपने स्थान के लिए शामिल एकल उद्धरणों को संरक्षित करने या स्थान से बचने के लिए।
David C. Rankin

@ DavidC.Rankin यह एक उत्तर होना चाहिए, मुझे लगता है।
Kamil Maciorowski

हां, यह एक तरह से सरल था, लेकिन मैं एक लेखन कर सकता हूं। धन्यवाद।
David C. Rankin

@ DavidC.Rankin को दोहरे उद्धरण चिह्नों में बदलने से एक नई त्रुटि सामने आती है। अब कमांड लिस्ट में वर्तमान डायरेक्टरी ls है जहाँ मैंने होस्ट थोर की डायरेक्टरी / stmp / यूजरनेम में ls के बजाय कमांड को निष्पादित किया है
nabilishes

जवाबों:


2

जब आपका कमांड कमांड-लाइन से काम करता है, उदा।

cd `ls -rtl | cut -d' ' -f9 | tail -1`

कोई उद्धृत करने वाली समस्याएं मौजूद नहीं हैं। हालाँकि, जब आप इसे अपने से जोड़ने का प्रयास करते हैं ssh आदेश, आप अपने लपेटो ssh में आज्ञा एकल कोट , लेकिन आपने भी शामिल किया है एकल कोट आपके आदेश के भीतर संलग्न करने के लिए ' ' (space) के साथ cut कमांड - समस्याओं का कारण।

सबसे आसान उपाय यह है कि आप अपने आस-पास के भाग को छोड़ दें ssh को आज्ञा एकल कोट और के आसपास बोली बदलें space सेवा मेरे डबल उद्धरण इसके भीतर, उदा।

ssh -t -X thor 'cd /stmp/username; cd `ls -rtl |cut -d" " -f9 | tail -1` ; rm ~/tmp.file; tcsh -l'

(परिणामस्वरूप कोई चर या पथ-विस्तार समस्याएँ नहीं हैं)

परिवर्तन करें और मुझे बताएं कि क्या आपके पास और सवाल है।

ध्यान दें: आपको भी बचना चाहिए कमांड प्रतिस्थापन का उपयोग करते हुए बैकटिक के पक्ष में $(...) - बहुत अधिक पठनीय।


यह समाधान काम करता है। धन्यवाद। आपने पोस्ट में उल्लेख किया है कि मुझे बैकटिक्स का उपयोग करने से बचना चाहिए, क्या आप $ (..) का उपयोग करके एक उदाहरण दिखा सकते हैं
nabilishes

उपयोग $(ls -rtl |cut -d" " -f9 | tail -1) के बजाय `ls -rtl |cut -d" " -f9 | tail -1`
David C. Rankin

मैं उत्सुक हूं कि मैंने ऐसा क्यों किया ssh -t -X thor "cd ... " काम नहीं करता?
nabilishes

1
@nabilishes यह स्थानीय रूप से बैकटिक्स अधिनियम बनाता है।
Kamil Maciorowski

चूंकि बाहरी दोहरे उद्धरण विस्तार को रोकते नहीं हैं, स्थानीय रूप से कमांड का विस्तार हो रहा था - एकल-उद्धरण में लपेटना सभी विस्तार को रोकता है
David C. Rankin
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.