2011-11-16 13 views
7

Bir Ruby komut dosyasında Bash komutunu çalıştırmam gerekiyor. Bunu "6 Ways to Run Shell Commands in Ruby" by Nate Murray ve diğer birkaç googled kaynağına göre yapmak için yaklaşık 6 yol vardır.ruby ​​execute bash komutu ile değişkenler

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

"Sınıfı" hangi sınıfta beklersiniz? –

cevap

4
, o bu yöntemleri zincirle gerçekten yapabilen değer ve puts sizin için bir yeni satır yazdırılır şey için

böylece bu sadece olabilir:

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

mükemmel teşekkür ederim. Bu benim ilk ruby ​​scriptim oldu, bu yüzden bu yöntemleri zincirleme notu için teşekkür ederim, bir şey hasta kullanıyorum çok düşünüyorum. – toosweetnitemare

+0

Ayrıca, alıntılanmış bir dizenin içindeki değişkenleri enterpolasyon yapmak istemiyorsanız, dizgi birleştirme işlecini (+) de kullanabilirsiniz: 'command =" winexe -U dmn1 \\\\ "+ myId +" // "+ host + '' cmd '' 'veya Ruby'nin printf benzeri sözdizimini kullanın:' command = 'winexe -U dmn1 \\\\% s //% s "cmd"'% [myId, ana bilgisayar] ' –

+0

teşekkürler glenn, çok yararlı bilgi – toosweetnitemare

5

Komut dizenizi nasıl bir araya getirdiğinizle ilgili sorun yaşanmış gibi görünüyor.
Ayrıca, doğrudan STDIN'e başvurmalıydım.

# 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 



Kompakt versiyon: printf tarzı ile

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\"" 

Son iki satır: ile

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

Son iki satır artı bir dizge birleştirme:

C++ tarzı append ile 10

Son iki satır:

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

bu da çalışıyor, teşekkürler. ama Matt'in beni gösterdiğini gösteren zincirleme yöntemini kullanacağım. – toosweetnitemare

+0

@toosweetnitemare: Bazı nedenlerden ötürü, kodunuzu olabildiğince az değiştirmem gerektiği fikrindeydim, ancak şu anda kötü bir fikir gibi görünüyor: P –

+0

lol. Sadece öğleden sonra Ruby'yi öğleden önce sormamı yayınlamadan önce öğrettim, bu yüzden dildeki sözdizimini anlamadaki eksikliğimi gösterdim. Örneğinizi çok farklı seçeneklere ayırmak için zaman ayırdığınız için teşekkür ederiz. Bu konuyu daha sonra görüntüleyen diğer kullanıcılar için çok değerli olacak. İki cevap için kredi verebilirsem, sana da veririm. Girdiğin için teşekkürler! – toosweetnitemare