script doesn't see arg in '$ ssh bash script arg' -


मैं दोनों आज्ञाओं को हैलो

  $ 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" "$ @ "हैलो वर्ल्ड एसएसएच रिमोट_होस्ट" $ सीएमडी_स्ट्रित "  

यह आपके आदेश का उद्धरण करने के लिए bash ( printf% q एक bash एक्सटेंशन है, जो कि POSIX printf में उपलब्ध नहीं है) है जैसे कि यह अपने आप में फैलता है जब एक शेल द्वारा संसाधित होता है, तो परिणाम को ssh में फ़ीड करता है।


जो सभी ने कहा - इलाज $ 0 एक नियमित पैरामीटर के रूप में बुरा व्यवहार होता है, और आम तौर पर एक विशिष्ट और आकर्षक कारण अनुपस्थित नहीं किया जाना चाहिए। सही चीज निम्न की तरह अधिक है:

  printf -v cmd '% q' / bin / echo हैलो दुनिया # आपके आदेश printf -v cmd '% q' bash -l -c " $ सीएमडी "# अपने कमांड, लॉगिन शेल एसएसएच रिमोटहोस्ट" $ सीएमडी "# अपने कमांड में, लॉगिन शेल में, ssh में    

Comments

Popular posts from this blog

java - ImportError: No module named py4j.java_gateway -

python - Receiving "KeyError" after decoding json result from url -

.net - Creating a new Queue Manager and Queue in Websphere MQ (using C#) -