Ruby を使用して、PTY を使用して複数の値を取る CLI とやり取りしようとしています。ただし、PTY によって生成された疑似端末を取得して、最初に渡した値を確認することしかできません。以下のスクリプトをテストします。
test.rb
require 'pty'
require 'expect'
def till_prompt(cout, prompt)
buffer = ""
regexPrompt = Regexp.new(Regexp.escape(prompt))
loop { buffer << cout.getc.chr; break if buffer =~ regexPrompt }
puts "buffer: \n" + buffer + "\nend of buffer\n"
return buffer
end
$expect_verbose = true
PTY.spawn("ruby inputTest.rb") do |output, input, pid|
till_prompt(output, "1: ")
input.printf("hello\n\rworld\n\r")
till_prompt(output, "2: ")
input.printf("world\n\r")
end
inputTest.rb
require 'highline/import'
word1 = ask("1: ")
word2 = ask("2: ")
word3 = ask("3: ")
system "echo '#{word1}\n#{word2}' > test.log"
puts "#{word1}\n#{word2}"
$ > 猫 test.log
hello
なぜ最初の応答しか得られないのかわかりません。
PSここでexpectを使用できることはわかっていますが、デバッグ目的で何が起こっているかをより詳細に制御できるように、カスタム関数に置き換えました。