Skrip AppleScript vs. Bash?

13

Saya sudah lama menjadi "pengguna daya" dan pengembang Windows yang baru-baru ini memutuskan untuk pindah ke Mac OS X.

Pada OS X Lion dan memang versi sebelumnya sepertinya ada dua opsi utama untuk scripting dan otomatisasi di OS X: AppleScript dan Bash script. Yang terakhir tentu saja merupakan konsekuensi langsung dari OS X menggunakan shell "bash" Unix, sedangkan yang pertama adalah inovasi Apple sendiri. Sintaksnya jelas sangat berbeda, dengan AppleScript memiliki gaya pseudo-natural-language.

Pertanyaan saya adalah, apakah skrip AppleScript dan Bash umum digunakan (memang, seandainya digunakan) untuk tugas dan tujuan yang berbeda pada OS X. Saya samar-samar menyadari berbagai tugas yang dapat saya selesaikan dengan skrip Bash, meskipun tentu saja kode untuk beberapa yang lebih maju dapat dengan cepat berbelit-belit. Apakah kedua bahasa ini memiliki kasus penggunaan yang tumpang tindih atau hampir identik, meskipun Apple kemudian menemukan AppleScript - atau apakah mereka dimaksudkan untuk digunakan dengan skenario yang berbeda dalam pikiran? Tinjauan tingkat tinggi serta beberapa contoh spesifik akan dihargai.

Noldorin
sumber
Jika Anda memiliki tugas yang berhubungan dengan membeli file dan folder "Hazel", itu adalah alat berbasis aturan yang sangat berguna yang sangat berguna. Itu juga dapat menendang skrip shell dan Applescripts berdasarkan aturan.
Stuart Woodward

Jawaban:

17

Baik shell- maupun AppleScripts dapat digunakan di mana saja dan jika diperlukan.

AppleScripts berfungsi lebih baik ketika berbicara dengan aplikasi dan fasilitas sistem tingkat pengguna. (Misalnya, Anda dapat mengatakan tell app "iTunes" to playdan itu akan, atau tell app "Finder" to open the first file of the second window.)

Skrip Shell (Anda dirujuk ke bash) berfungsi lebih baik ketika berbicara dengan objek sistem tingkat rendah dan hal-hal Unixy.

Keduanya interoperable: Anda dapat memanggil perintah shell dari AppleScript dengan do shell script "command here"dan Anda dapat memanggil kode AppleScript dari shell dengan osascript -e "AppleScript". Selanjutnya, ada sedikit tumpang tindih antara keduanya (terutama ketika datang ke operasi sistem file).

Tentu saja ada lebih banyak sumber untuk belajar skrip shell online daripada AppleScript dan itu tidak membantu bahwa AppleScript memiliki reputasi sebagai bahasa "baca-saja" (yaitu, lebih sulit untuk menulis daripada membaca).

Bagaimanapun, cara paling modern untuk melakukan scripting adalah dengan Automator, di mana Anda dapat menggunakan shell-atau AppleScripting (atau keduanya) bersama dengan modul pra-dibangun dari berbagai aplikasi yang telah Anda instal.

Cajunluke
sumber
Terima kasih; itu gambaran yang sangat informatif. Apakah Anda memiliki rekomendasi untuk sumber belajar yang baik di AppleScript? (Skrip Bash juga, walaupun saya sendiri mungkin bisa menemukannya dengan mudah.)
Noldorin
3
AppleScript memiliki (agak diraih) reputasi sebagai hanya-baca; Script Shell terkadang condong ke ujung spektrum "tulis saja".
Daniel
@Noldorin Saya membeli buku untuk belajar AppleScript, tetapi saya cenderung menggunakan Google terlebih dahulu dan indeks buku kedua ketika saya mencoba mengingat sintaks dari perintah tertentu.
Cajunluke
@ CajunLuke: Ah, cukup adil. Bagaimana Anda mempelajari AppleScript untuk pertama kalinya ??
Noldorin
@Noldorin Cukup banyak trial and error dan Google. Ada beberapa hal yang sulit bagi Google, jadi itu sebabnya saya membeli buku itu.
Cajunluke
8

Sementara salah satu konteks skrip dapat melakukan apa pun yang dapat dilakukan oleh yang lain (karena skrip shell dapat memanggil /usr/bin/osascriptuntuk memanggil AppleScript, dan AppleScript memiliki do shell scriptperintah), memang ada konteks yang lebih cocok dari yang lain.

Kedua bahasa scripting adalah bahasa "lem" - mereka dapat melakukan sendiri hal-hal minimal, dan alih-alih menyelesaikan sebagian besar tugas mereka dengan menggunakan kemampuan program lain. Skrip Shell memanfaatkan pipa Unix, sementara AppleScript memiliki tell applicationsintaksis.

Di mana mereka berbeda adalah bahwa AppleScripts langsung berkomunikasi dengan aplikasi skrip (hampir selalu aplikasi GUI), sedangkan skrip shell berkomunikasi terutama dengan program command-line (beberapa di antaranya dapat memanggil antarmuka pengguna grafis, tetapi banyak yang tidak).

Ketika datang ke tugas manajemen file, kedua pendekatan dapat bekerja. Satu dapat Tell Application Findermenyalin file, atau menjalankan cpperintah dalam skrip shell. Jadi mengapa menggunakan satu di atas yang lain? Tentu saja beberapa penulis naskah lebih akrab dengan satu bahasa daripada yang lain, dan dengan demikian akan lebih suka menggunakan alat itu. Namun pertimbangan yang lebih baik adalah dari pengguna skrip. AppleScript sering dapat dipanggil dari Mac GUI: mengklik dua kali aplikasi AppleScript, atau menjatuhkan file ke satu, atau menggunakan menu AppleScript baik di seluruh sistem atau dalam program tertentu. Program seperti Mail dapat diatur untuk menjalankan AppleScript pada pesan yang masuk untuk memfilternya. Untuk pengguna yang terbiasa menggunakan Mac dengan cara "seperti Mac" (yaitu dari GUI), skrip Apple seringkali lebih mudah diakses.

Skrip shell sering (tetapi tidak selalu) tinggal di Terminal. Jika seseorang sudah menggunakan Terminal, menjalankan skrip shell di sana bisa lebih nyaman daripada memanggil AppleScript. Di sisi lain, banyak pengguna tidak senang dengan harus mengetik perintah di jendela Terminal, atau bahkan mengklik file skrip yang membuka jendela Terminal untuk melakukan keajaibannya. Saya pribadi menemukan sintaks skrip shell lebih mudah dibaca daripada skrip AppleScript, tapi saya curiga saya termasuk minoritas dalam skrip itu. Skrip Shell sudah biasa bagi pengguna berbagai sistem mirip Unix.

Bagaimanapun, keduanya adalah alat yang ampuh untuk mendapatkan kontrol yang lebih baik atas Mac Anda.

Daniel
sumber
Terima kasih; ini tentu mengklarifikasi masalah ini dan mengkonfirmasi beberapa kecurigaan saya.
Noldorin
Saya menduga bahwa Tell Application Finderuntuk menyalin file akan membuka jendela dengan bilah kemajuan yang terlihat, sementara cptidak. Apakah itu benar?
TRiG
4

Jawaban lainnya memberikan ikhtisar tingkat tinggi yang luar biasa tentang niat di balik kedua teknik penulisan skrip ini. Mungkin saya hanya akan memberi Anda contoh bagaimana saya menggunakannya.

Dengan Applescript, saya telah membuat aturan pemrosesan untuk Mail, menghubungkan BBEdit ke R untuk pemrosesan statistik, membuat Folder Action yang kompleks, dan melakukan reorganisasi besar-besaran berdasarkan foto-foto saya di iPhoto dan Aperture. Saya juga membuat aplikasi mini dengan tombol dan tampilan teks. Pada dasarnya, ini adalah manipulasi otomatis aplikasi yang kompleks dengan GUI.

Dengan skrip Bash, saya telah membuat rutinitas pemrosesan gambar otomatis dengan Imagemagick, rutinitas pemrosesan PDF dengan Ghostscript, rutinitas waktu dan tanggal, dan banyak pemrosesan teks dengan Bash, sed / awk, dan Perl. Utilitas Unix cenderung ramping, cepat, dan fleksibel, dan Bash adalah cara yang bagus untuk menggabungkannya menjadi alat yang sangat kuat dan mudah.

Saya kadang-kadang memanggil skrip Bash dari dalam sebuah Applescript, biasanya untuk keperluan pemrosesan teks (GREP) atau untuk pengambilan situs web ringan (ikal). Saya hampir selalu menggunakan teknik ini untuk mendapatkan sedikit data atau variabel untuk digunakan lebih lanjut dalam Applescript saya.

Abu
sumber
Ah, contoh spesifik ini agak membantu. Terima kasih untuk ini. Apakah Anda memiliki sumber belajar yang disarankan untuk AppleScript? Untuk pemula yang lengkap. (Saya telah menggunakan skrip Bash kecil di masa lalu dan mungkin dapat mempelajari kembali sendiri.)
Noldorin
2
Ya, buku yang paling banyak saya manfaatkan adalah "AppleScript: The Definitive Guide" karya Matt Neuberg. Dokumentasi pengembang Apple tidak masalah, dan layak untuk dijadikan referensi, tetapi buku Neuberg dengan jujur ​​menilai kekuatan dan kelemahan bahasa tersebut. Anda akan menemukan bahwa desakan Applescript pada tata bahasa "alami" tidak terlalu alami, dan dalam banyak kasus akan berlawanan dengan intuisi. Neuberg mengklarifikasi kapan itu terjadi dan mengapa.
Ash
Itulah kesan yang saya dapatkan dari awalnya melihat bahasa. Rumah setengah jalan antara mesin dan bahasa alami ini agak aneh. Sorakan untuk rekomendasi!
Noldorin
3

Ini mungkin penyederhanaan berlebihan, tetapi shell scripting adalah untuk menggabungkan program yang ada untuk melakukan tugas-tugas baru sedangkan AppleScript adalah untuk mengontrol (kebanyakan GUI) aplikasi dari jarak jauh. Program Unix Klasik biasanya membaca beberapa input dan menghasilkan beberapa output dan skrip shell memungkinkan Anda menggabungkannya. AppleScript adalah untuk mengotomatiskan aplikasi GUI.

lhf
sumber