下面 Ruby 代码的预期操作如下:
- 将命令行命名的文件 ARGV[0] 写入 old
- 创建该文件的新临时副本
- 循环直到用户给出输入
- 删除临时文件
当我硬编码等于 hello.c 的旧代码时,do 循环中的超时按我的预期工作:它等待 3 秒以等待来自键盘的输入,如果没有给出输入救援块并重复。
当我将 old 设置为 ARGV[0](也是 hello.c)时,将 fp 分配给 hello.c 的第一行,并且代码会跳出循环。
我如何运行它:
user@cpu live$ ruby test.rb hello.c
hello.c
#include <stdio.h>
user@cpu live$
编码:
#!/usr/bin/env ruby
require 'timeout'
old = ARGV[0].chomp
puts old # sanity check
# old = 'hello.c'
new = 'tmp_' + old
`cp #{old} #{new}`
fp = nil
loop do
begin
Timeout::timeout(3) { fp = gets }
puts fp # sanity check
break if (fp)
rescue Timeout::Error
# ...
end
end
`rm #{new}`
我不明白为什么从命令行读取与硬编码文件名有什么不同。
感谢您提供的任何帮助。谢谢。