在指定命令行参数时,Ruby不再使用gets等待输入

时间:2017-05-16 16:39:01

标签: ruby

使用命令行参数运行ruby脚本时,“gets”不再阻塞,它不起作用。

test.rb

#!/usr/bin/ruby
puts "should wait for input"
gets
puts "test"

以下是我如何运行它

$ ./test.rb test.rb
  should wait for input
  test

它没有等待。

我正在运行Ubuntu 16.04桌面,Ruby来自存储库ruby 2.3.1p112(2016-04-26)[x86_64-linux-gnu]

我做错了什么?

3 个答案:

答案 0 :(得分:2)

没关系,

“gets”实际上取自我在cli参数中添加的文件的第一行。

非常奇怪。

答案 1 :(得分:2)

除了像其他人推荐的STDIN.gets之外,如果您事先致电gets,则可以使用普通ARGV.clear。如果没有类似于脚本的参数的命令,则常规gets按预期工作,但如果有,则会读取它们。您使用./test.rb test.rb的原因并不是很清楚,但第二个文件名是命令行参数。

更具体地说,如果在填充ARGV时调用常规gets,则结果将是文件的内容

max@max ~> echo "content" > test.txt
max@max ~> ruby -e "puts ARGV.inspect; puts gets" test.txt
["test.txt"]
content

答案 2 :(得分:0)

您可以使用STDIN.gets

#!/usr/bin/ruby
puts 'should wait for input'
STDIN.gets
puts 'test'