Among all the ways this seems to me the most convenient, if briefly:
IO.popen(command)
And for myself, I wrote this function:
require 'colored' # запуск внешней команды с сохранением вывода # если в выводе попадется true_pattern, то возращаем его индекс def sysrun(command, true_patterns, debug) # запустить и считать вывод $lines = IO.popen(command + " 2>&1").readlines.join.split("\n") # если включен режим дебага, то вывести все на экран if debug puts # декоративный отступ puts "\t" + "command: ".bold.black + command.to_s.green puts "\t" + "true patterns: ".bold.black + true_patterns.to_s.yellow $lines.each { |line| puts "\t" + line.to_s.cyan } end # в случае если есть пустой паттерн соответствия, но также пустой вывод - возвращаем тру true_patterns.each { |pattern| return 0 if (pattern.empty? && $lines.empty?) } true_patterns.delete("") # удаляем пустые паттерны, чтобы следующая проверка не заглючила # пройтись по строкам и паттернам $lines.each do |line| true_patterns.each_with_index { |pattern, indx| return indx if (line.match pattern) } end return false end
Call:
sysrun("dir", ["Volume"], true)