Существует ли автоматизированный способ создания оболочки оболочки в Ruby? Я пытаюсь преобразовать следующий код оболочки в Ruby:
a | b | c... > ...
но единственным решением, которое я нашел до сих пор, является сам управление буфером (упрощенный, непроверенный, надеюсь, что он получит мой смысл):
a = IO.popen('a')
b = IO.popen('b', 'w+')
Thread.new(a, b) { |in, out|
out.write(in.readpartial(4096)) until in.eof?
out.close_write
}
# deal with b.read...
Я предполагаю, что я ищу способ использовать popen для использования существующего потока, а не для создания нового? Или, альтернативно, метод слияния IO # для подключения вывода к входу b? Мой текущий подход становится довольно неудобным, когда число фильтров растет.
Я знаю о Kernel#system('a | b')
, очевидно, но мне нужно смешивать фильтры Ruby с внешними программными фильтрами в общем виде.