STDIN.gets在使用curl获取文件并使用管道传输到ruby时生成nil

时间:2012-07-09 16:49:21

标签: ruby stdin

因此,如果我使用curl下载并运行以下代码,则生成nil并且不会提示任何内容。

str=gets
unless str.nil?
  puts str
else
  puts "gets produced nil"
end

正在使用的命令(您可以自己尝试)

curl https://raw.github.com/gist/3077534/06ea1c27f7bed38408d2662671f29ea758e2e54b/gets_test.rb | ruby

这样做有更好/更常见的做法吗?

1 个答案:

答案 0 :(得分:2)

这可能对您有用:

tty = STDIN.reopen('/dev/tty')

tty.each_line do |line|
  break if line == "\n"
  puts line
end

tty.close

它适合我:

$ curl https://raw.github.com/gist/3078191 | ruby
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100   106  100   106    0     0     84      0  0:00:01  0:00:01 --:--:--   153
foo
foo
foobar
foobar
now pressing enter ...
now pressing enter ...