Ruby脚本看不到它创建的文件的外部更改,具体取决于它的位置';快跑
一位同事最近编写了一个Ruby脚本,它通过在外部文本编辑器中打开一个带有一些初始化文本的临时文件来提示用户输入,然后在编辑器关闭后对其执行操作。此行为类似于git处理提交/标记编辑的方式Ruby脚本看不到它创建的文件的外部更改,具体取决于它的位置';快跑,ruby,file-io,Ruby,File Io,一位同事最近编写了一个Ruby脚本,它通过在外部文本编辑器中打开一个带有一些初始化文本的临时文件来提示用户输入,然后在编辑器关闭后对其执行操作。此行为类似于git处理提交/标记编辑的方式 require'tempfile' @命令=选项[:cmd]| |“vim” @file=Tempfile.new(“缓冲区”) @write(“这是文件中的初始文本”) 放置@file.read @pid=Kernel.spawn(“#{@command}#{@file.path}”) Process.wai
require'tempfile'
@命令=选项[:cmd]| |“vim”
@file=Tempfile.new(“缓冲区”)
@write(“这是文件中的初始文本”)
放置@file.read
@pid=Kernel.spawn(“#{@command}#{@file.path}”)
Process.wait(@pid)
@文件倒带
contents=@file.read
#用“内容”做东西
这个脚本对我的许多同事来说都很好,但当我运行它时,它不会接受我对临时文件所做的更改:它仍然将临时文件视为具有初始化文本。我追踪了这个问题,直到它是如何读取文件的@file.rewind
不足以让它拾取更改。如果我不是通过file对象重新读取文件,而是根据file.new(@file.path)
创建一个新文件,我就可以让它工作。因此,我怀疑在我运行文件时,文件内容正在被缓冲,而不是在它们被缓冲时
我正在macOS 10.12.2上使用Ruby 2.4.0p0。这是为一位在OS X 10.11.6上使用Ruby 2.0.0p643的同事和另一位在Ubuntu上使用2.3.0-p0的同事设计的。我确认,当我使用Ruby 2.0.0p648时,它在我的机器上不起作用,所以我怀疑这可能是由于操作系统的不同,而不是Ruby的不同
请注意,我在Ruby中所做的工作很少,所以我可能遗漏了一些明显的东西
因此,我的问题是:
这对我来说是一个与您类似的环境(mac/ruby 2.4.x)。下面是临时缓冲区中内容更改的完整脚本
require 'tempfile'
options = {}
@command = options[:cmd] || "nano"
@file = Tempfile.new("buffer")
@file.write("This is the initial text in the file")
puts @file.read
@pid = Kernel.spawn("#{@command} #{@file.path}")
Process.wait(@pid)
@file.rewind
contents = @file.read
puts contents
我把它改成了nano
,但是vim
也起作用了。也许你的vim配置出错了
我的测试:
放入内容显示嘿。我想这就是你想要的