Dosya değişiklikleri otomatik olarak nasıl izlenir ve kabuk içinde özel bir eylem gerçekleştirilir?


6

Örneğin, otomatik olarak çalıştırmak istiyorum YUI Kompresör ne zaman sıkıştırılmış bir sürüm elde etmek için bir JavaScript kaynak dosyasını düzenlersem.

İdeal olarak, işlem arka planda değil, özel bir kabukta gerçekleşir, bu nedenle işlemi günün sonunda kolayca sonlandırabilirim.

Dosya değişiklikleri için belirli dosyaları ve / veya dizinleri izlemenin ve bir kabuk içinde özel bir eylem gerçekleştirmenin en temiz ve en esnek yolu ne olurdu?

Yanıtlar:


2

25 dolar Codekit klasörleri ve dosyaları değişikliklere izler ve JavaScript ve CSS dosyalarını sıkıştırır / küçültür / birleştirir.

Bunun genel bir izleyici olmadığı için sorunuza yalnızca kısmi bir cevap olduğunu biliyorum, ancak örneğinize uygun:

ne zaman sıkıştırılmış bir çıktı almak için bir JavaScript kaynak dosyasını düzenlersem   versiyon


Teşekkürler, kullanışlı bir uygulamaya benziyor, fakat tam olarak aradığım çözüm değildi. Gerçekten dosyaları izleyebilecek ve değişikliklerle ilgili özel komutlar verebilecek genel bir şey istiyorum.
Gerry

1

Değişiklikler için bir dosyayı izlemek bir LaunchAgent ile gerçekleştirilebilir. Örneğin adresinde bir pist dosyası oluşturun ~/Library/LaunchAgents/watch.and.lol.plist ve bu içerikle doldurun:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>Label</key>
    <string>watch.and.lol</string>
    <key>ProgramArguments</key>
    <array>
        <string>/Users/Shared/changeAction.sh</string>
        <string>-force</string>
    </array>
    <key>WatchPaths</key>
    <array>
        <string>/private/var/radmind/client/.radmindOnDemand</string>
    </array>
</dict>
</plist>

Şimdi dosyanın olduğundan emin ol /private/var/radmind/client/.radmindOnDemand var. Ardından launchagent komutunu kullanarak yükleyin $ launchctl load ~/Library/LaunchAgents/watch.and.lol.plist. Dosya olur olmaz ~/Library/LaunchAgents/watch.and.lol.plist artık mevcut değil, bu yıkıcı iş boşaltılacak.

Şimdi, dosyanızdaki değişiklikleri izleyen bazı kabuk komut dosyaları yazın:

chsum1=""

while [[ true ]]
do
    chsum2=`md5 /private/var/radmind/client/.radmindOnDemand`
    if [[ $chsum1 != $chsum2 ]] ; then           
        compile
        chsum1=`md5 /private/var/radmind/client/.radmindOnDemand`
    fi
    sleep 2
done

Not: Bu kabuk betiğinin, verimli hale getirmek için yapılması gereken bazı ek çalışmalara ihtiyacı vardır. Şimdi her 2 saniyede bir anket yapıyor ( sleep 2 ). En iyisi, komut dosyasından sonra komut dosyasından çıkmak. compile komut yürütüldü. Bu, md5 hash komutunun çıktısının depolanmasını gerektirir ve bu kabuk betiğinin çıkışına ve rötuşuna dayanabilir.


Teşekkür ederim. Her zaman fırlatma ajanı yazmayı pek istemiyorum, izleyicileri ekleyebilecek ve izleyeceği dosyayı ve anında argüman olarak çalıştırılacak komutu belirtecek kadar esnek bir çözüm arıyorum.
Gerry
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.