2012-07-26 69 views
1

我需要在一個adb shell上運行幾個命令。在一個新的shell中運行多個命令(阻塞)

我第一次嘗試是使用POPEN:

def adb_root(commands) 
    console = IO.popen('adb shell', :mode => 'w') 
    commands.each do |cmd| 
    console.puts(cmd) 
    end 
end 

但這種啓動子的過程,當所有命令的執行,我不知道。 我需要這個被阻止。

有沒有簡單的方法來做到這一點?

回答

0

我使用 「的bash -c」 而不是 「ADB殼」

commands_array = ["ls /", "cd /tmp/", "echo 123"] 

def run_commands(commands) 
    response = [] 
    commands.each do |command| 
     IO.popen("/bin/bash -C#{command}") do | cmd_io | 
      response << cmd_io.readlines.map(&:strip) 
      puts "Response: #{response.inspect}" 
     end 
    end 
    return response 
end 

puts run_commands(commands_array).inspect 

這將打開每個命令一個新的(的bash/ADB)殼。據我所知,沒有一個很好的方法可以知道命令何時完成。希望這可以幫助。

相關問題