Ho bisogno di eseguire diversi comandi su una shell adb.
Il mio primo tentativo è stato di usare popen:
def adb_root(commands)
console = IO.popen("adb shell", :mode => "w")
commands.each do |cmd|
console.puts(cmd)
end
end
Ma questo avvia un processo secondario e non so quando vengono eseguiti tutti i comandi. Avrei bisogno di questo per bloccare.
C'è un modo semplice per farlo?
risposte:
0 per risposta № 1Uso "bash -c" invece di "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
Questo apre una nuova shell (bash / adb) per ogni comando. Non c'è davvero un buon modo per sapere quando il comando è finito altrimenti per quanto ne so. Spero che questo aiuti.