2011-11-16 38 views
7

Tôi cần thực hiện lệnh Bash trong tập lệnh Ruby. Có khoảng 6 cách để thực hiện điều này theo số "6 Ways to Run Shell Commands in Ruby" by Nate Murray và một vài nguồn khác được cung cấp.ruby ​​thực thi lệnh bash với các biến

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

Bạn mong đợi lớp 'lệnh' là gì? –

Trả lời

4

Đối với những gì nó có giá trị bạn thực sự có thể chuỗi các phương pháp đó, và puts sẽ in một dòng mới cho bạn, vì vậy đây chỉ có thể là:

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

hoàn hảo cảm ơn bạn. Đó là kịch bản ruby ​​đầu tiên của tôi bao giờ cũng cảm ơn bạn cũng cho lưu ý về chuỗi các phương pháp, điều gì đó som của nó bị bệnh sử dụng rất nhiều tôi nghĩ. – toosweetnitemare

+0

Bạn cũng có thể sử dụng toán tử nối chuỗi (+) nếu bạn không muốn nội suy các biến bên trong một chuỗi được trích dẫn: 'command =" winexe -U dmn1 \\\\ "+ myId +" // "+ host + '' cmd '' ', hoặc sử dụng cú pháp giống như printf của Ruby:' command = 'winexe -U dmn1 \\\% s //% s "cmd"'% [myId, host] ' –

+0

cảm ơn bạn glenn, rằng là thông tin rất hữu ích – toosweetnitemare

5

Dường như có thể có vấn đề với cách bạn đặt chuỗi lệnh của mình với nhau.
Ngoài ra, tôi phải tham khảo trực tiếp STDIN.

# 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 



phiên bản nhỏ gọn:

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

cuối hai dòng với phong cách printf:

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

cuối hai dòng với cộng nối chuỗi:

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

cuối hai dòng với C++ phong cách append:

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

điều này cũng hoạt động, cảm ơn bạn. nhưng im sẽ sử dụng phương pháp xích mà Matt đã chỉ cho tôi ở trên. – toosweetnitemare

+0

@toosweetnitemare: Vì lý do nào đó, tôi đã có ý tưởng rằng tôi nên thay đổi mã của bạn càng ít càng tốt, nhưng điều đó có vẻ như là một ý tưởng tồi bây giờ: P –

+0

lol. Tôi đã tự học cho mình một buổi chiều hôm qua trước khi đăng câu hỏi của tôi để nó chắc chắn cho thấy sự thiếu hiểu biết về cú pháp của tôi trong ngôn ngữ. Cảm ơn bạn đã dành thời gian để chia nhỏ ví dụ của bạn thành rất nhiều tùy chọn khác nhau. Điều đó sẽ rất có giá trị đối với những người dùng khác đang xem chuỗi này sau. Nếu tôi có thể cho tín dụng cho hai câu trả lời tôi cũng sẽ cung cấp cho nó cho bạn. Cảm ơn về thông tin bạn vừa nhập! – toosweetnitemare

Các vấn đề liên quan