这是一个示例 ruby 代码:
r = gets
puts r
如果脚本是从控制台独立执行的,它工作正常。但是如果我通过管道运行它:
echo 'testtest' | ruby test.rb
gets
似乎被重定向到管道输入,但我需要一些用户输入。
如何?
这是一个示例 ruby 代码:
r = gets
puts r
如果脚本是从控制台独立执行的,它工作正常。但是如果我通过管道运行它:
echo 'testtest' | ruby test.rb
gets
似乎被重定向到管道输入,但我需要一些用户输入。
如何?
调用 shell 已将标准输入附加到管道的接收端。如果你真的需要交互式输入,你有几个选择。您可以直接打开 tty 输入,将 stdin 绑定到管道:
tty_input = open('/dev/tty') {|f| f.gets }
/dev/tty
在 linux 和 OS/x 下工作,但可能无法在任何地方工作。
或者,您可以在 bash 下使用不同形式的重定向(进程替换)来提供(以前是管道)输入作为作为参数传递的伪文件,并将 stdin 绑定到您的终端:
ruby test.rb <(echo 'testtest')
# test.rb
input = open(ARGV[0])
std_input = gets
input.readlines { |line| process_line(line) }