[ruby]thorコマンド内でgetsを実行すると`gets': No such file or directory @ rb_sysopen エラーが発生
thorを使ってCLIコマンドを作っていた際に、getsを使ってユーザ入力を受け取ろとしたところ
`gets': No such file or directory @ rb_sysopen
というエラーが発生してしまいました。
thor内でgetsを実行する場合は
STDIN.gets.chomp
にするとよいそうです。
サンプル
# sample
require 'rubygems'
require 'thor'
class Sample < Thor
desc "hello", "this is gets sample"
def hello
while true
print "is it ok? [y|n]:"
response = STDIN.gets.chomp
#response = gets # <= gets だとエラー発生
case response
when /^[yY]/
p 'YES!YES!YES!'
return
when /^[nN]/, /^$/
p 'NO!NO!NO!'
return
end
end
end
end
Sample.start(ARGV)
サンプル実行
bundle exec ruby sample hello
is it ok? [y|n]:y
"YES!YES!YES!"
これで直りました。