मुझे शेल कमांड को इस प्रकार निष्पादित करने की आवश्यकता है:
ssh & lt; device & gt; "कमांड"
कमांड को इस प्रकार लागू किया जाता है:
$ (typeset); & LT; function_name & gt; \ "Arguement_string \"; सीडी ...; Ls ...
यहां उद्धृत करने के लिए बिल्कुल कैसे? क्या यह सही है?
"" $ (टाइपसेट); & LT; function_name & gt; \ "Arguement_string \" "cd ...; ls ..."
मैं खोल लिपियों में इस उद्धरण के साथ भ्रमित हूँ।
<
कमांड_अरे == (Function_name "प्रथम तर्क" "दूसरा तर्क") printf -v कमांड_स्ट्रित '% q' "$ {command_array [@]}" ssh_str = "$ (typeset); $ command_str" एसएसएच मशीन "$ ssh_str" < / Pre> आप चाहते हैं कि आप command_array
को बना सकते हैं - सशर्त रूप से जोड़ों के लिए तर्क का प्रयोग करके, केवल उन उद्धरणों का उद्धरण जिसे आप आमतौर पर उन मानों के लिए उपयोग करते हैं, और दें printf% q
ssh के माध्यम से पास करने के लिए सामग्री को सुरक्षित बनाने के लिए आवश्यक सभी अतिरिक्त उद्धरण जोड़ें।
यदि आप एक स्क्रिप्ट को बढ़ते हुए बनाने की कोशिश कर रहे हैं, तो आप कि ऐसा है:
remote_script = "$ (typeset)" $ '\ n' safe_append_command () {स्थानीय command_str printf -v command_str '% q' "$ @" दूरस्थ_क्रिप्ट = "$ command_str "$ '\ n' } Safe_append_command cp "$ file" "$ destination" safe_append_command tar -cf /tmp/foo.tar "$ {destination% / *}" # ... etc ... एसएसएच मशीन "$ remote_script"
पूर्व> ध्यान दें कि इस मामले में, सभी विस्तारों को स्थानीय स्तर पर लेते हैं, जब स्क्रिप्ट उत्पन्न होती है, और शेल निर्माण जैसे कि रीडायरेक्शन ऑपरेटरों का उपयोग नहीं किया जा सकता (उन्हें किसी फ़ंक्शन में एम्बेड करके फिर दूरस्थ सिस्टम को typeset
के साथ पास करें)। ऐसा करने का अर्थ है कि safe_append_command
को कोई भी डेटा पारित नहीं किया जा सकता - कोड के रूप में माना जा सकता है - लचीलेपन की लागत पर संभावित सुरक्षा छेदों के बड़े वर्गों को रोकना।
No comments:
Post a Comment