Как захватить вывод команды без ее отображения в stdout

Как я могу получить выходные данные команды и проверить, что она говорит, без отображения команды в stdout? Например:

  def update!
      `git pull origin master`
      if $?.exitstatus > 0
        puts 'Failed to update'
      elsif $?.success?
        puts 'Upgraded successfully'
      else
        puts 'Already up to date'
      end
    end

Как я могу захватить выходные данные этого, чтобы проверить, говорит ли команда up-to date, ошибка происходит или успешно обновляется? Есть ли способ записать вывод в файл, а не на консоль?


Обновление для ответа:

def update!
  update_status = `git pull origin master 2>&1`
  if $?.exitstatus > 0
    puts 'error'
  elsif update_status =~ /Already up-to date/
    puts 'same version as origin master'
  else
    puts 'updated'
  end
end

Выход для этого всегда будет:

[06:44:29 INFO] Updating to newest version..
updated

Даже если версия совпадает с оригинальной. Что я хотел бы сделать, если это возможно, это сохранить stdout команды в файл и читать из этого файла, чтобы узнать, была ли программа обновлена ​​или нет. Я думаю, что это будет самый простой способ сделать это.

1 ответ

Решение

Вы можете назначить вывод команды на строку.

использование 2>&1 перенаправить stderr в stdout и, таким образом, захватить весь вывод.

str = `git pull origin master 2>&1`
if $?.exitstatus > 0
  ...
elsif str =~ /up-to-date/
  ...
else
  ...
end
Другие вопросы по тегам