J'ai besoin d'exécuter plusieurs commandes sur un shell adb.
Ma première tentative a été d'utiliser popen:
def adb_root(commands)
console = IO.popen("adb shell", :mode => "w")
commands.each do |cmd|
console.puts(cmd)
end
end
Mais cela commence un sous-processus et je ne sais pas quand toutes les commandes sont exécutées. J'aurais besoin de cela pour bloquer.
Y a-t-il un moyen facile de faire ceci?
Réponses:
0 pour la réponse № 1J'utilise "bash -c" au lieu de "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
Cela ouvre un nouveau shell (bash / adb) pour chaque commande. Il n’existe pas vraiment de moyen de savoir quand la commande est terminée sinon, autant que je sache. J'espère que cela vous aidera.