2011-11-16 9 views
7

मुझे रूबी स्क्रिप्ट में बैश कमांड निष्पादित करने की आवश्यकता है। "6 Ways to Run Shell Commands in Ruby" by Nate Murray और कुछ अन्य googled स्रोतों के अनुसार ऐसा करने के लगभग 6 तरीके हैं।चर के साथ ruby ​​execute bash कमांड

print "enter myid: " 
myID = gets 
myID = myID.downcase 
myID = myID.chomp 
print "enter host: " 
host = gets 
host = host.downcase 
host = host.chomp 
print "winexe to host: ",host,"\n" 
command = "winexe -U domain\\\\",ID," //",host," \"cmd\"" 
exec command 
+0

आप किस वर्ग को 'कमांड' होने की उम्मीद करते हैं? –

उत्तर

4

क्या यह आप वास्तव में उन तरीकों श्रृंखला कर सकते हैं लायक है, और puts आप के लिए एक नई पंक्ति प्रिंट होगा, के लिए तो यह सिर्फ हो सकता है:

print "enter myid: " 
myID = STDIN.gets.downcase.chomp 

print "enter host: " 
host = STDIN.gets.downcase.chomp 

puts "winexe to host: #{host}" 
command = "winexe -U dmn1\\\\#{myID} //#{host} \"cmd\"" 
exec command 
+0

सही आपका धन्यवाद। यह मेरी पहली रूबी लिपि थी, इसलिए उन विधियों को चेन करने के बारे में नोट के लिए भी धन्यवाद, यह कुछ बीमार है जो मुझे लगता है। – toosweetnitemare

+0

यदि आप उद्धृत स्ट्रिंग के अंदर चर को इंटरपोलेट नहीं करना चाहते हैं तो आप स्ट्रिंग कॉन्सटेनेशन ऑपरेटर (+) का भी उपयोग कर सकते हैं: 'command =" winexe -U dmn1 \\\\ "+ myId +" // "+ होस्ट + '' cmd "', या रूबी के printf-like वाक्यविन्यास का उपयोग करें:' command = 'winexe -U dmn1 \\\\% s //% s" cmd "'% [myId, host]' –

+0

धन्यवाद ग्लेन, बहुत उपयोगी जानकारी – toosweetnitemare

5

ऐसा लगता है कि आप अपनी कमांड स्ट्रिंग को एक साथ कैसे डाल रहे थे, इस तरह की समस्या हो सकती है।
इसके अलावा, मुझे सीधे एसटीडीआईएन का संदर्भ देना पड़ा।

# Minimal changes to get it working: 
print "enter myid: " 

myID = STDIN.gets 
myID = myID.downcase 
myID = myID.chomp 

print "enter host: " 
host = STDIN.gets 
host = host.downcase 
host = host.chomp 

print "winexe to host: ",host,"\n" 
command = "echo winexe -U dmn1\\\\#{myID} //#{host} \"cmd\"" 
exec command 



कॉम्पैक्ट संस्करण:

print "enter myid: " 
myID = STDIN.gets.downcase.chomp 

print "enter host: " 
host = STDIN.gets.downcase.chomp 

puts "winexe to host: #{host}" 
exec "echo winexe -U dmn1\\\\#{myID} //#{host} \"cmd\"" 

अंतिम दो printf शैली के साथ लाइनों:

puts "winexe to host: %s" % host 
exec "echo winexe -U dmn1\\\\%s //%s \"cmd\"" % [myID, host] 

अंतिम दो के साथ लाइनों के साथ साथ स्ट्रिंग संयोजन:

puts "winexe to host: " + host 
exec "echo winexe -U dmn1\\\\" + myID + " //" + host + " \"cmd\"" 

अंतिम दो C++ शैली संलग्न के साथ लाइनों:

puts "winexe to host: " << host 
exec "echo winexe -U dmn1\\\\" << myID << " //" << host << " \"cmd\"" 
+0

यह भी काम करता है, धन्यवाद। लेकिन मैं जंजीर विधि का उपयोग करने जा रहा हूं कि मैट ने मुझे ऊपर दिखाया। – toosweetnitemare

+0

@toosweetnitemare: किसी कारण से, मुझे यह विचार था कि मुझे जितना संभव हो सके अपना कोड बदलना चाहिए, लेकिन यह अब एक बुरा विचार जैसा लगता है: पी –

+0

लॉल। मैंने अपने प्रश्न को पोस्ट करने से पहले कल दोपहर रूबी को पढ़ाया था, इसलिए यह निश्चित रूप से भाषा में वाक्यविन्यास की समझ की कमी को दिखाता है। अपने उदाहरण को इतने सारे अलग-अलग विकल्पों में तोड़ने के लिए समय निकालने के लिए धन्यवाद। बाद में इस धागे को देखने वाले अन्य उपयोगकर्ताओं के लिए यह बहुत मूल्यवान होगा। अगर मैं दो उत्तरों के लिए क्रेडिट दे सकता हूं तो मैं आपको यह भी दूंगा। आपके इनपुट के लिए धन्यवाद! – toosweetnitemare