AppleScript ve Bash betiği mi?


13

Son zamanlarda Mac OS X'e geçmeye karar veren uzun zamandır Windows "güçlü kullanıcısı" ve geliştiricisiyim.

OS X Lion ve aslında önceki sürümlerde, OS X'te komut dosyası oluşturma ve otomasyon için iki ana seçenek var gibi görünüyor: AppleScript ve Bash komut dosyası. İkincisi elbette Unix "bash" kabuğu kullanan OS X'in doğrudan bir sonucudur, birincisi ise Apple'ın kendi yeniliği. Sözdizimleri açıkça çok farklıdır, AppleScript sözde doğal dil stiline sahiptir.

Benim sorum, OSScript'te farklı görevler ve amaçlar için yaygın olarak kullanılan AppleScript ve Bash betiği (gerçekten de kullanılmaları gerekir). Bash betiği ile başarabileceğim çok çeşitli görevlerin belirsiz bir şekilde farkındayım, elbette kod çünkü bazı daha gelişmiş olanlar hızla kıvrılabilir. Apple'ın sonraki AppleScript buluşuna rağmen bu iki dilin çakışan veya neredeyse aynı kullanım durumları var mı - yoksa farklı senaryoları göz önünde bulundurarak kullanılması amaçlanıyor mu? Üst düzey bir genel bakış ve bazı spesifik örnekler takdir edilecektir.


Eğer dosya ve klasörlerle ilgili görevleriniz varsa "Hazel" satın alırsanız, çok kullanışlı bir kural tabanlı araç. Ayrıca kurallara göre kabuk betikleri ve Applescripts başlatabilir.
Stuart Woodward

Yanıtlar:


17

Hem kabuk hem de AppleScripts hemen hemen her yerde kullanılabilir.

AppleScripts, uygulamalarla ve kullanıcı düzeyindeki sistem tesisleriyle konuşurken daha iyi çalışır. (Örneğin, söyleyebilir tell app "iTunes" to playve söyleyecektir , ya da tell app "Finder" to open the first file of the second window.)

Kabuk komut dosyaları (bash olarak adlandırılırsınız), düşük düzeyli sistem nesneleri ve Unixy öğeleriyle konuşurken daha iyi çalışır.

İkisi birlikte çalışabilir: AppleScript'ten kabuk komutunu çağırabilir ve kabuktan do shell script "command here"AppleScript kodunu çağırabilirsiniz osascript -e "AppleScript". Ayrıca, ikisi arasında biraz çakışma var (özellikle dosya sistemi işlemleri söz konusu olduğunda).

Çevrimiçi kabuk komut dosyası yazmayı öğrenmek için AppleScript'ten kesinlikle daha fazla kaynak vardır ve AppleScript'in "salt okunur" bir dil olarak (yani, okunmaktan daha zor) bir üne sahip olmasına yardımcı olmaz.

Her durumda, komut dosyası oluşturmanın en modern yolu, yüklediğiniz çeşitli uygulamalardan önceden oluşturulmuş modüller ile birlikte kabuk veya AppleScripting'i (veya her ikisini) kullanabileceğiniz Automator'dur.


Teşekkürler; bu çok bilgilendirici bir genel bakış. AppleScript perchance'da iyi öğrenme kaynakları için tavsiyeleriniz var mı? (Bash senaryosu da, muhtemelen bunları kolayca kendim bulabiliyorum.)
Noldorin

3
AppleScript, salt okunur olduğu için (biraz kazanılmış) bir üne sahiptir; Kabuk betikleri bazen spektrumun "salt yazılan" sonuna doğru eğilir.
Daniel

@Noldorin AppleScript'i öğrenmek için bir kitap satın aldım, ancak belirli bir komutun sözdizimini hatırlamaya çalıştığımda önce Google'ı ve ikinci olarak kitabın dizinini kullanma eğilimindeyim.
Cajunluke

@CajunLuke: Ah, yeterince adil. AppleScript'i ilk kez nasıl öğrendiniz?
Noldorin

@Noldorin Hemen hemen deneme yanılma ve Google. Bazı şeyler Google için zor, bu yüzden kitabı satın aldım.
Cajunluke

8

Her iki komut dosyası bağlam iken edebilirsiniz (kabuk komut çağırabilir çünkü için herşeyi diğer kutu yapmak /usr/bin/osascriptbir AppleScript çağırmak için ve AppleScript sahiptir do shell scriptkomutu), gerçekten de daha iyi bir diğerinden daha uygundur kendisi için bağlamları vardır.

Her iki komut dosyası dili de "tutkal" dildir - kendileri için çok az şey yapabilirler ve bunun yerine görevlerinin çoğunu diğer programların yeteneklerini çağırarak yerine getirebilirler. Shell komut dosyaları Unix kanallarından yararlanırken, AppleScript tell applicationsözdizimine sahiptir.

Ayrıldığı yerlerde, AppleScripts'in komut dosyası yazılabilir uygulamalarla (neredeyse her zaman GUI uygulamaları) doğrudan iletişim kurarken, kabuk komut dosyaları öncelikle komut satırı programlarıyla iletişim kurar (bazıları grafik kullanıcı arabirimlerini çağırabilir, ancak birçoğu bunu yapmaz).

Dosya yönetimi görevleri söz konusu olduğunda, her iki yaklaşım da işe yarayabilir. Bir edebilir Tell Application Finderdosyaları kopyalamak veya çalıştırmak için cpbir kabuk komut komutu. Öyleyse neden birini diğerinin üzerinde kullanıyorsunuz? Elbette bazı senaryo yazarları bir dile diğer dillerden daha aşinadır ve bu nedenle bu aracı kullanmayı tercih edecektir. Ancak senaryo kullanıcısı daha iyi bir düşüncedir. AppleScript genellikle Mac GUI'den çağrılabilir: bir AppleScript uygulamasını çift tıklamak veya dosyaları birine bırakmak veya sistem genelinde veya belirli bir program içinde bir AppleScript menüsü kullanarak. Mail gibi programlar, gelen iletileri filtrelemek için bir AppleScript çalıştıracak şekilde ayarlanabilir. Mac'leri "Mac benzeri" bir şekilde kullanmaya alışkın olan kullanıcılar için (yani, GUI'den), AppleScripts genellikle daha erişilebilirdir.

Shell komut dosyaları genellikle (ancak her zaman değil) Terminal'de yaşar. Terminal zaten kullanılıyorsa, bir kabuk betiği çalıştırmak bir AppleScript çağırmaktan daha uygun olabilir. Öte yandan, birçok kullanıcı bir Terminal penceresine komutlar yazarak veya hatta sihrini yapmak için bir Terminal penceresi açan bir komut dosyasını tıklatarak ertelenir. Şahsen kabuk komut dosyalarının sözdizimini AppleScripts'ten daha okunabilir buluyorum, ancak bu konuda azınlıkta olduğumdan şüpheleniyorum. Kabuk komut dosyaları , birçok farklı Unix benzeri sistemin kullanıcılarına aşinadır.

Her durumda, Mac'iniz üzerinde daha iyi kontrol elde etmek için her ikisi de güçlü araçlardır.


Teşekkür ederim; bu kesinlikle konuyu aydınlatır ve bazı şüphelerimi doğrular.
Noldorin

Tell Application FinderDosyaları kopyalamak görünür ilerleme çubuğu olan bir pencere açacak, ancak cpolmayacak sanırım . Bu doğru mu?
TRiG

4

Diğer cevaplar, bu iki kodlama tekniğinin ardındaki niyetin yüksek düzeyde genel bir görünümünü vermektedir. Belki sadece onları nasıl kullandığımla ilgili örnekler veririm.

Applescript ile Mail için işleme kuralları hazırladım, istatistiksel işleme için BBEdit'i R'ye bağladım, karmaşık Klasör Eylemleri oluşturdum ve iPhoto ve Aperture'daki fotoğraflarımın zamana dayalı büyük bir yeniden düzenlemesini yaptım. Ayrıca düğmeli ve metin ekranlı mini uygulamalar oluşturdum. Temel olarak, bu GUI'lerle karmaşık uygulamaların otomatik olarak değiştirilmesidir.

Bash komut dosyası ile Imagemagick ile otomatik görüntü işleme rutinleri, Ghostscript ile PDF işleme rutinleri, saat ve tarih rutinleri ve Bash, sed / awk ve Perl ile birçok metin işleme oluşturdum. Unix yardımcı programları yalın, hızlı ve esnek olma eğilimindedir ve Bash bunları çok güçlü ve kolay araçlarla birleştirmenin harika bir yoludur.

Bazen Bash scriptlerini bir Applescript içinden çağırıyorum, genellikle metin işleme amaçlı (GREP) veya hafif web sitesi getirme (kıvırma) için. Neredeyse her zaman bu tekniği Applescript'imde kullanmak için biraz veri veya değişken elde etmek için kullanıyorum.


Ah, bu özel örnekler oldukça faydalı. Bunun için teşekkürler. Bu arada AppleScript için önerilen öğrenme kaynaklarınız var mı? Tam bir başlangıç ​​için. (Geçmişte küçük bir Bash betiği kullandım ve muhtemelen kendim de yeniden öğrenebilirim.)
Noldorin

2
Evet, en çok yararlandığım kitap Matt Neuberg'in "AppleScript: Kesin Kılavuz" idi. Apple'ın geliştirici belgeleri tamam ve referans için danışmaya değer, ancak Neuberg'in kitabı, dilin hem güçlü hem de zayıf yönlerini oldukça dürüst bir şekilde değerlendiriyor. Applescript'in "doğal" dilbilgisi üzerindeki ısrarının çok doğal olmadığını ve birçok durumda mantık dışı olacağını göreceksiniz. Neuberg bunun ne zaman ve neden olduğunu açıklar.
Ash

Başlangıçta dile bakmaktan aldığım izlenim tam olarak bu. Makine ve doğal diller arasındaki bu yarım ev oldukça garip görünüyor. Tavsiye için alkış!
Noldorin

3

Aşırı basitleştirme olabilir, ancak kabuk komut dosyası oluşturma, yeni programları gerçekleştirmek için var olan programları birleştirmek için kullanılırken, AppleScript uygulamaları (çoğunlukla GUI) uzaktan kontrol etmektir. Klasik Unix programları genellikle bazı girişleri okur ve bazı çıktılar üretir ve kabuk komut dosyaları bunları birleştirmenizi sağlar. AppleScript, GUI uygulamalarını otomatikleştirmektir.

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.