在新shell上运行多个命令(阻塞)

时间:2012-07-26 16:31:26

标签: android ruby

我需要在adb shell上运行几个命令。

我的第一次尝试是使用popen:

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

但这会启动一个子进程,我不知道何时执行所有命令。 我需要这个阻止。

有一种简单的方法吗?

1 个答案:

答案 0 :(得分:0)

我使用“bash -c”而不是“adb shell”

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)shell。据我所知,没有一种非常好的方法可以知道命令何时完成。希望这会有所帮助。