script AppleScript vs. Bash?

12

Sono un "utente esperto" di Windows di lunga data e uno sviluppatore che ha recentemente deciso di passare a Mac OS X.

Su OS X Lion e in effetti sulle versioni precedenti sembrano esserci due opzioni principali per lo scripting e l'automazione in OS X: script AppleScript e Bash. Quest'ultima è ovviamente una conseguenza diretta di OS X che utilizza la shell "bash" di Unix, mentre la prima è l'innovazione di Apple. Le sintassi sono chiaramente molto diverse, con AppleScript che ha uno stile pseudo-naturale.

La mia domanda è: gli script AppleScript e Bash sono comunemente usati (anzi dovrebbero essere usati) per compiti e scopi diversi su OS X. Sono vagamente consapevole della vasta gamma di compiti che posso realizzare con lo script Bash, anche se di Ovviamente il codice per alcuni più avanzati può diventare rapidamente contorto. Queste due lingue hanno casi di utilizzo sovrapposti o quasi identici, nonostante la successiva invenzione AppleScript di Apple - o sono pensati per essere utilizzati con diversi scenari in mente? Una panoramica di alto livello e alcuni esempi specifici sarebbero apprezzati.

    
posta Noldorin 01.06.2012 - 01:14
fonte

4 risposte

15

Sia shell che AppleScript possono essere utilizzati praticamente ovunque sia appropriato.

Gli AppleScript funzionano meglio quando si parla di app e di servizi a livello di utente. (Ad esempio, puoi dire tell app "iTunes" to play e sarà, o tell app "Finder" to open the first file of the second window .)

Gli script di shell (di cui si è parlato bash) funzionano meglio quando si parla di oggetti di sistema di basso livello e roba Unixy.

Sono entrambi interoperabili: puoi chiamare un comando shell da AppleScript con do shell script "command here" e puoi chiamare il codice AppleScript dalla shell con osascript -e "AppleScript" . Inoltre, c'è un po 'di sovrapposizione tra i due (specialmente quando si tratta di operazioni sul file system).

Ci sono sicuramente più risorse per imparare lo scripting di shell online rispetto ad AppleScript e non aiuta AppleScript ad avere la reputazione di essere un linguaggio "di sola lettura" (cioè, più difficile da scrivere che leggere).

In ogni caso, il modo più moderno di fare lo scripting è con Automator, dove puoi usare shell o AppleScripting (o entrambi) insieme a moduli pre-costruiti da varie app che hai installato.

    
risposta data 01.06.2012 - 02:08
fonte
8

Mentre il contesto di scripting può fare qualsiasi cosa l'altro può (perché gli script di shell possono chiamare /usr/bin/osascript per invocare un AppleScript e AppleScript ha il comando do shell script ), esistono effettivamente contesti per i quali uno è più adatto dell'altro.

Entrambi i linguaggi di scripting sono linguaggi di "colla": possono fare da soli le cose minime, e invece svolgere la maggior parte dei loro compiti invocando le capacità di altri programmi. Gli script di shell fanno uso di pipe Unix, mentre AppleScript ha la sintassi tell application .

Dove divergono è che AppleScripts comunica direttamente con le applicazioni scriptable (quasi sempre applicazioni GUI), mentre gli script della shell comunicano principalmente con i programmi della riga di comando (alcuni dei quali possono richiamare le interfacce utente grafiche, ma molti non lo fanno).

Quando si tratta di attività di gestione dei file, entrambi gli approcci possono funzionare. Uno può Tell Application Finder per copiare i file, o eseguire il comando cp in uno script di shell. Quindi perché usarne uno sull'altro? Certamente alcuni sceneggiatori hanno più familiarità con una lingua rispetto all'altra, e quindi preferiranno usare quello strumento. Ma una considerazione migliore è dell'utente della sceneggiatura. Spesso AppleScript può essere richiamato dalla GUI Mac: facendo doppio clic su un'applicazione AppleScript o trascinandone i file su uno di essi, oppure utilizzando un menu AppleScript a livello di sistema o all'interno di un particolare programma. Programmi come Mail possono essere impostati per eseguire un AppleScript sui messaggi in arrivo per filtrarli. Per gli utenti abituati a utilizzare i Mac in modalità "Mac" (ad esempio dalla GUI), gli AppleScript sono spesso più accessibili.

Gli script di shell spesso (ma non sempre) vivono nel terminale. Se si sta già utilizzando Terminal, l'esecuzione di uno script di shell può essere più comoda del richiamo di un AppleScript. D'altra parte, molti utenti sono scoraggiati dal dover digitare comandi in una finestra di Terminale, o anche fare clic su un file di script che apre una finestra di Terminale per fare la sua magia. Personalmente trovo la sintassi degli script di shell più leggibile rispetto a quella degli AppleScript, ma sospetto che io sia in minoranza su quello. Gli script di shell sono familiari per gli utenti di molti diversi sistemi simili a Unix.

In ogni caso, entrambi sono strumenti potenti per ottenere un controllo migliore sul tuo Mac.

    
risposta data 01.06.2012 - 04:05
fonte
4

Le altre risposte offrono grandi panoramiche di alto livello sull'intenzione di queste due tecniche di scripting. Forse ti darò solo esempi di come li uso.

Con Applescript, ho creato regole di elaborazione per Mail, connesso BBEdit a R per l'elaborazione statistica, creato azioni di cartelle complesse e effettuato una massiccia riorganizzazione basata sul tempo delle mie foto in iPhoto e Aperture. Ho anche creato mini-app con pulsanti e display di testo. Fondamentalmente, questa è la manipolazione automatica di app complesse con GUI.

Con lo scripting di Bash, ho creato routine automatiche di elaborazione delle immagini con Imagemagick, routine di elaborazione PDF con Ghostscript, routine di data e ora e un sacco di elaborazione del testo con Bash, sed / awk e Perl. Le utilità Unix tendono ad essere snelle, veloci e flessibili e Bash è un ottimo modo per combinarle in strumenti molto potenti e facili.

A volte chiamo script Bash all'interno di un Applescript, di solito per scopi di elaborazione del testo (GREP) o per il recupero di siti Web leggeri (curl). Uso quasi sempre questa tecnica per ottenere un po 'di dati o una variabile da utilizzare ulteriormente in Applescript.

    
risposta data 01.06.2012 - 03:35
fonte
3

Potrebbe essere una semplificazione eccessiva, ma lo shell scripting è per combinare programmi esistenti per eseguire nuove attività mentre AppleScript controlla le applicazioni (principalmente GUI) da remoto. I programmi Unix classici in genere leggono alcuni input e producono un output e lo scripting della shell consente di combinarli. AppleScript è per automatizzare le applicazioni GUI.

    
risposta data 01.06.2012 - 02:07
fonte

Leggi altre domande sui tag