script doesn't see arg in '$ ssh bash script arg' -
मैं दोनों आज्ञाओं को कैसे एक लॉगिन शेल शुरू करने के लिए जब आप .. .तो, उन तर्कों को गूंज की कमांड लाइन पर नहीं रखा जाता है (जब तक कि आप इसे बनाने के अपने तरीके से बाहर नहीं जाते), लेकिन इसके बजाय उन्हें कमांड लाइन जिसे आप एको चलाने के लिए कह रहे हैं कोई तर्क के साथ । यही कहना है: जब आप ... इस के बराबर है: ... जो कि अब, क्योंकि एसएसटी द्वारा चीजों को निष्पादित करने का मतलब है कि आप खोल विस्तार के दो चरणों के माध्यम से जा रहे हैं, यह कुछ अतिरिक्त जटिलता जोड़ता है सौभाग्य से, आप अपने आप के लिए स्वचालित रूप से शैल हैंड कर सकते हैं, जैसे: यह आपके आदेश का उद्धरण करने के लिए bash ( जो सभी ने कहा - इलाज हैलो
$ Bash -l -c "/ bin / echo हैलो" नमस्कार $ ssh example_host bash -l -c / bin / echo नमस्कार $
हैलो
ssh कमांड में एक पैरामीटर के रूप में पारित किया जा सकता है?
bash -l -c की आवश्यकता है, इसलिए प्रवेश शेल स्टार्टअप स्क्रिप्ट निष्पादित की जाती है।
ssh >
-c के बाद अतिरिक्त एग्ज पास करते हैं, तो उन्हें शेल के argv में डाल दिया जाता है, जब कि कमांड निष्पादित होता है। आप ऐसा देख सकते हैं:
bash -l -c '/ bin / echo "$ 0" "$ @"' हैलो वर्ल्ड '
bash - नमस्कार
(exec -a हैलो बैश -सी / बिन / इको )
हैलो को एक कोड के रूप में
$ 0 डालता है जो केवल
/ bin / echo ।
/ bin / echo चलाने से
$ 0 नहीं दिखता है, निश्चित रूप से यह
हैलो प्रिंट नहीं जा रहा है।
printf -v cmd_str '% q' bash -l -c '/ bin / echo "$ 0" "$ @ "हैलो वर्ल्ड एसएसएच रिमोट_होस्ट" $ सीएमडी_स्ट्रित "
printf% q एक bash एक्सटेंशन है, जो कि POSIX printf में उपलब्ध नहीं है) है जैसे कि यह अपने आप में फैलता है जब एक शेल द्वारा संसाधित होता है, तो परिणाम को
ssh में फ़ीड करता है।
$ 0 एक नियमित पैरामीटर के रूप में बुरा व्यवहार होता है, और आम तौर पर एक विशिष्ट और आकर्षक कारण अनुपस्थित नहीं किया जाना चाहिए। सही चीज निम्न की तरह अधिक है:
printf -v cmd '% q' / bin / echo हैलो दुनिया # आपके आदेश printf -v cmd '% q' bash -l -c " $ सीएमडी "# अपने कमांड, लॉगिन शेल एसएसएच रिमोटहोस्ट" $ सीएमडी "# अपने कमांड में, लॉगिन शेल में, ssh में
Comments
Post a Comment