1

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

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

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

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

是否有捷径可寻?

4

1 回答 1

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

于 2012-07-26T23:33:49.530 回答