如何在没有stdout中显示的命令的情况下捕获命令的输出并检查它的内容?例如:
union
如何捕获此输出以检查命令是否显示 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
保存到文件中并从该文件中读取以发现程序是否已更新。我认为这是最简单的方法。
答案 0 :(得分:1)
您可以将命令的输出分配给字符串。
使用2>&1
将stderr重定向到stdout,从而捕获所有输出。
str = `git pull origin master 2>&1`
if $?.exitstatus > 0
...
elsif str =~ /up-to-date/
...
else
...
end