1

adb シェルでいくつかのコマンドを実行する必要があります。

私の最初の試みは 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

「adb shell」の代わりに「bash -c」を使用します

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) シェルが開きます。私の知る限り、コマンドがいつ終了したかを知る良い方法はありません。お役に立てれば。

于 2012-07-26T23:33:49.530 に答える