2012-06-25 11 views
5

मैं सेटअप निम्नलिखित संरचना के साथ एक उदाहरण परियोजना:गार्ड शेल स्क्रिप्ट निष्पादित करता है दो बार

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 

खोल चल गार्ड में: एक खोल में

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

समान व्यवहार vim/नैनो आदि के लिए खातों दिलचस्प है, जब मैं सिर्फ चलाने echo blah > test.txt, गार्ड केवल एक बार सक्रिय करता है।

कोई विचार यह है कि मैं इसे कैसे होने से रोक सकता हूं या क्या यह व्यवहार की उम्मीद है?

संपादित करें: GitHub पर एक मुद्दे को खोला गया: https://github.com/guard/guard/issues/297#issuecomment-6586266

उत्तर

5

guard और/या guard-shell की एक बग/सुविधा की तरह लगता है। मैं इसके लिए github पर मुद्दे में रिपोर्ट करेंगे।

# 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 
+0

महान :) मैं यकीन नहीं है कि मैं कुछ स्पष्ट याद कर रहा हूँ नहीं था: इस बीच यहां फ़ाइलों चल रहा है, जहां mtime पिछली बार की तरह ही है को रोकने के लिए एक (बदसूरत) वैकल्पिक हल है। उत्तर के लिए धन्यवाद! – jabalsad

संबंधित मुद्दे