Мне нужно запустить несколько команд в оболочке adb.
Моя первая попытка состояла в том, чтобы использовать popen:
def adb_root(commands)
console = IO.popen('adb shell', :mode => 'w')
commands.each do |cmd|
console.puts(cmd)
end
end
Но это начинает подпроцесс, и я не знаю, когда выполняются все команды. Мне нужно, чтобы это блокировалось.
Есть простой способ сделать это?
Я использую "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) для каждой команды. Насколько я знаю, нет действительно хорошего способа узнать, когда команда закончилась иначе. Надеюсь это поможет.