Как захватить вывод команды без ее отображения в 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