我得到2个不同的输出(忽略不重要的东西):
2.5.0
"Mystery Train\r\n^D\b\b\r\n"
"Mystery Train\r\n^D\b\b\r\n"
2.5.0
"Mystery Train\r\n^D\b\b\r\n"
"Mystery Train\r\n^D\b\b\r\n2f1675da1e96a41954149a646cf6fb40\r\n"
代码如下,以下是与不同方式运行相对应的结果:
脚本 - 输出1
IRB - 输出2
撬 - 输出2
问题是 - 为什么我在脚本和repl之间以及方法调用之间获得不同的输出?
我在OSX上使用Ruby v2.5.0和md5
运行它,在Ubuntu上运行Ruby v2.5.1和md5sum
得到几乎相同的结果(任何差异都是因为md5 vs md5sum的输出格式)。
warn RUBY_VERSION # sanity check
MD5 = "md5"
TEXT = "Mystery Train\n\x4"
require 'pty'
def pty!
master,slave = PTY.open
pid = spawn(MD5, in: slave, out: slave )
master.puts TEXT
begin
p master.read_nonblock 4096
rescue Errno::EAGAIN
IO.select([master])
retry
end
ensure
master.close
slave.close
end
pty!
puts "----"
# code below is identical but not wrapped in a method
master,slave = PTY.open
pid = spawn(MD5, in: slave, out: slave )
master.puts TEXT
begin
p master.read_nonblock 4096
rescue Errno::EAGAIN
IO.select([master])
retry
end
master.close
slave.close
我尝试使用Process.wait改变执行顺序......,使用管道和slave pty,但我得到了相同的结果。如果使用eval
将repl和脚本之间的差异归结为repl,那么为什么该方法在repl中不起作用?
非常感谢任何帮助或见解。