gpt4 book ai didi

ruby - Guard 执行两次 shell 脚本

转载 作者:数据小太阳 更新时间:2023-10-29 07:16:19 25 4
gpt4 key购买 nike

我设置了一个具有以下结构的示例项目:

Gemfile
Guardfile

这些文件的内容是:

# Gemfile
source :rubygems
gem "guard"
gem "guard-shell"

# Guardfile
guard 'shell' do
watch(/^test\.txt$/) {|m| `echo #{m.inspect} #{File.mtime(m[0])}` }
end

然后我继续运行 guard。每当我将某些内容回显到该文件中时,守卫就会两次注册更改。在一个外壳中:

$ echo blah >> test.txt

在运行守卫的shell中:

> [test.txt] 2012-06-26 00:40:22 +0200
> [test.txt] 2012-06-26 00:40:22 +0200

同样的行为也适用于 vim/nano 等。有趣的是,当我运行 echo blah > test.txt 时,守卫只触发一次。

知道如何防止这种情况发生或者这是否是预期行为?

编辑:在 github 上打开了一个问题:https://github.com/guard/guard/issues/297#issuecomment-6586266

最佳答案

似乎是 guard 和/或 guard-shell 的错误/功能。我会为此在 github 上报告问题。同时,这里有一个(丑陋的)解决方法来防止运行 mtime 与上次相同的文件:

# Guardfile
class GFilter
def self.run(files, &block)
@mtimes ||= Hash.new

files.each { |f|
mtime = File.mtime(f)
next if @mtimes[f] == mtime
@mtimes[f] = mtime

yield f
}
end
end

guard 'shell' do
watch(/^test\.txt$/) {|m| GFilter.run(m) { |f| puts "File: #{f}" } }
end

关于ruby - Guard 执行两次 shell 脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11198446/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com