Запуск более одной команды в новой оболочке (блокировка)

1

Мне нужно запустить несколько команд в оболочке adb.

Моя первая попытка состояла в том, чтобы использовать popen:

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

Но это начинает подпроцесс, и я не знаю, когда выполняются все команды. Мне нужно, чтобы это блокировалось.

Есть простой способ сделать это?

Теги:

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) для каждой команды. Насколько я знаю, нет действительно хорошего способа узнать, когда команда закончилась иначе. Надеюсь это поможет.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню