ruby выполняет команду bash с переменными - PullRequest
8 голосов
/ 17 ноября 2011

Мне нужно выполнить команду Bash в Ruby-скрипте. Существует около 6 способов сделать это в соответствии с «6 способов запуска команд оболочки в Ruby» Нейта Мюррея и несколькими другими источниками с гуглом.

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 

Ответы [ 2 ]

6 голосов
/ 17 ноября 2011

За то, что оно того стоит, вы можете фактически связать эти методы, и 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
5 голосов
/ 17 ноября 2011

Похоже, что могут быть проблемы с тем, как вы собирали командную строку.Кроме того, я должен был обратиться к 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

Компактная версия:

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\""
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...