使用命令行参数运行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]
我做错了什么?
答案 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'