我想创建一个脚本,我可以将列表输入:cat list | ruby script.rb
我知道我可以使用ARGF
来完成此操作并且它可以正常工作。但是我想再次迭代每一行,并根据决定对其进行一些操作。但是当我使用STDIN.gets
时,当我输入内容时,我甚至不会被要求输入。
这就是我现在所拥有的
#!/usr/bin/env ruby
# encoding: utf-8
items = []
ARGF.each_with_index do |line, index|
items << line
end
items.each_with_index do |item, index|
puts "What to do with #{item}? (1,2,3)"
case STDIN.gets
when 1
puts "one"
when 2
puts "two"
when 3
puts "three"
end
end
感谢任何暗示我指向正确方向的提示。
答案 0 :(得分:1)
阅读并浏览Ruby-Docs一段时间后,我找到了一种方法。我需要打开一个新的IO-Stream,因为ARGF
已经被cam指出关闭。
#!/usr/bin/env ruby
ARGF.each_with_index do |line, index|
puts "#{index}: #{line}"
end
fd = IO.sysopen("/dev/tty", "w+")
IO.open(fd, "w+") do |io|
puts "Enter something:"
puts "You entered: #{io.gets}"
end
可能不是最佳实践,但现在对我有用,不应成为该主题的主题。
答案 1 :(得分:0)
如果您也希望能够使用STDIN,则无法使用ARGF
。 STDIN只是文件列表,然后它被关闭(这是你的shell执行此操作,而不是ruby,所以你无法控制)。
答案 2 :(得分:-1)
如果list是一个文件名,并且它包含你想在脚本中使用的行号,那么请尝试运行script.rb以下命令。
ruby script.rb list
注意:列表应该是一个文件,其中您有数字行,您可以选择询问它。另外,请在分享后输出!!!