Belirli bir uygulamaya kaydettiğimde OS 10.9'a bir şey yapmasını nasıl söylerim?


0

Belirli bir uygulamada "Kaydettiğimde" otomatik olarak bir kabuk komutunu, AppleScript veya launchd görevini nasıl uygulayabilirim?

İşletim Sistemi: Mavericks

Yanıtlar:


0

Bu SO cevabı muhtemelen sorunuza cevap verir - Bash komut dosyası, klasör izleme, komutu çalıştır .

Bu komut dosyası 2 saniye boyunca uyuduğu ve MD5 karmaları bir dizindeki dosyalarda yeniden hesapladığı için cron çalıştırmaktan uzak değildir.

Gerçek bir olay odaklı çözüm istiyorsanız, FSEvent kullanarak fswatch veya başka bir uygulamayı / libu deneyebilirsiniz .


Bu yaklaşımla ilgili sorun (bir klasörü izlemektir), dosyamı her seferinde farklı bir klasöre kaydetmek isteyebilirim ya da diğer işlemlerin FSEvent'e (veya launchd) izlemesini söylediğim klasör içeriğini değiştirebilir.

Bunu atlatmanın en kolay yolu, bu dosyaları sonsuz bir G / Ç döngüsü alma riski olmadan dönüşüm yapabileceğiniz bir tmp dizinine kopyalamaktır. Bir uygulama kaydetme olayına bağlanmanın kolay bir yolu yoktur. DTrace (rwbypid.d) ile çalmayı deneyebilir ve uygulamanız bir dosyayı kaydettiğinde izlemeye devam edebilirsiniz. IMHO çok fazla güçlük çekiyor, ancak belirli bir adlandırma veya dir yapısı yapmanın bir yolu yoksa, o zaman bu şekilde gitmek.
Zamber

0

WatchPathsAnahtarını arıyorsun launchd. Şurada bir iş tanımı oluşturun ~/Library/LaunchAgents:

<?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>local.convertToTxt</string>
        <key>Program</key>
        <string>/path/to/script</string>
        <key>WatchPaths</key>
        <array>
            <string>/path/to/directory</string>
        </array>
    </dict>
</plist>

Zor kısım, hangi dosyanın değiştirildiğini bulmak . Betik, bir dosya bu dizinde her oluşturulduğunda veya değiştirildiğinde launchdtetiklenir ancak eylemi tetikleyen dosyanın ipucunu sağlamaz. Dizin içeriğini oluşturma tarihine ( ls -t /path/to/directory | head -1) göre sıralamak, durumunuzda hile yapmalıdır. Dönüştürülen dosyanızı başka bir dizine de yazdığınızdan emin olun. Aksi takdirde, dosya dönüştürme komut dosyasını tekrar tetikler.


Bu yaklaşımla ilgili sorun (save komutu yerine bir klasör izlemek), dosyamı her seferinde farklı bir klasöre kaydetmek isteyebilirim veya diğer işlemlerin başlatılmasını söylediğim klasörün içeriğini değiştirmesini izleyebileceğim.

Kabul. Bu durumda launchdsize yardımcı olmayacak.
LCC
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.