Script AppleScript contre Bash?

13

Je suis un "utilisateur avancé" de Windows et un développeur de longue date qui a récemment décidé de passer à Mac OS X.

Sur OS X Lion et en effet les versions précédentes, il semble y avoir deux options principales pour l'écriture de scripts et l'automatisation sous OS X: AppleScript et le script Bash. Ce dernier est bien sûr une conséquence directe d'OS X utilisant le shell "bash" Unix, tandis que le premier est la propre innovation d'Apple. Les syntaxes sont clairement très différentes, AppleScript ayant un style de langage pseudo-naturel.

Ma question est la suivante: les scripts AppleScript et Bash sont-ils couramment utilisés (en fait, devraient-ils être utilisés) pour des tâches et des objectifs disparates sur OS X. Je connais vaguement la vaste gamme de tâches que je peux accomplir avec le script Bash, bien que, bien sûr, le code pour certains plus avancés, ils peuvent rapidement devenir compliqués. Ces deux langages ont-ils des cas d'utilisation qui se chevauchent ou presque identiques, malgré l'invention ultérieure d'Apple d'AppleScript - ou sont-ils destinés à être utilisés avec différents scénarios à l'esprit? Un aperçu de haut niveau ainsi que quelques exemples spécifiques seraient appréciés.

Noldorin
la source
Si vous avez des tâches liées aux fichiers et aux dossiers, achetez "Hazel", c'est un outil très puissant basé sur des règles qui est très utile. Il peut également lancer des scripts shell et des Applescripts en fonction de règles.
Stuart Woodward

Réponses:

17

Les scripts shell et Apple peuvent être utilisés à peu près partout où cela est approprié.

Les AppleScripts fonctionnent mieux lorsque vous parlez aux applications et aux installations système au niveau de l'utilisateur. (Par exemple, vous pouvez dire tell app "iTunes" to playet ce sera le cas, ou tell app "Finder" to open the first file of the second window.)

Les scripts shell (vous avez fait référence à bash) fonctionnent mieux lorsque vous parlez à des objets système de bas niveau et à des éléments Unixy.

Ils sont tous deux interopérables: vous pouvez appeler une commande shell à partir d'AppleScript avec do shell script "command here"et vous pouvez appeler du code AppleScript à partir du shell avec osascript -e "AppleScript". De plus, il y a un peu de chevauchement entre les deux (surtout en ce qui concerne les opérations du système de fichiers).

Il existe certainement plus de ressources pour apprendre les scripts shell en ligne qu'AppleScript et cela n'aide pas qu'AppleScript ait la réputation d'être un langage "en lecture seule" (c'est-à-dire plus difficile à écrire qu'à lire).

Dans tous les cas, la façon la plus moderne de faire des scripts est d'utiliser Automator, où vous pouvez utiliser soit le shell, soit le AppleScripting (ou les deux) avec des modules prédéfinis à partir de diverses applications que vous avez installées.

Cajunluke
la source
Merci; c'est un aperçu très instructif. Avez-vous des recommandations pour de bonnes ressources d'apprentissage sur AppleScript peut-être? (Script Bash aussi, bien que je puisse probablement les trouver assez facilement moi-même.)
Noldorin
3
AppleScript a la réputation (quelque peu méritée) d'être en lecture seule; Les scripts shell se penchent parfois vers l'extrémité "en écriture seule" du spectre.
Daniel
@Noldorin J'ai acheté un livre pour apprendre AppleScript, mais j'ai tendance à utiliser Google en premier et l'index du livre en second lorsque j'essaie de me souvenir de la syntaxe d'une commande particulière.
Cajunluke
@CajunLuke: Ah, très bien. Comment avez-vous appris AppleScript pour la première fois?
Noldorin
@Noldorin À peu près essai et erreur et Google. Certaines choses sont difficiles pour Google, c'est pourquoi j'ai acheté le livre.
Cajunluke
8

Alors que l'un ou l'autre des contextes de script peut faire tout ce que l'autre peut faire (car les scripts shell peuvent appeler /usr/bin/osascriptpour appeler un AppleScript et AppleScript a la do shell scriptcommande), il existe en effet des contextes pour lesquels l'un est mieux adapté que l'autre.

Les deux langages de script sont des langages «collants» - ils peuvent faire un minimum de choses eux-mêmes et accomplir à la place la plupart de leurs tâches en invoquant les capacités d'autres programmes. Les scripts shell utilisent des canaux Unix, tandis qu'AppleScript a la tell applicationsyntaxe.

Là où ils divergent, c'est que les AppleScripts communiquent directement avec des applications scriptables (presque toujours des applications GUI), tandis que les scripts shell communiquent principalement avec des programmes en ligne de commande (dont certains peuvent appeler des interfaces utilisateur graphiques, mais beaucoup ne le font pas).

En ce qui concerne les tâches de gestion de fichiers, les deux approches peuvent fonctionner. On peut Tell Application Findercopier des fichiers ou exécuter la cpcommande dans un script shell. Alors pourquoi utiliser l'un sur l'autre? Certes, certains scénaristes connaissent mieux une langue que l'autre et préféreront donc utiliser cet outil. Mais une meilleure considération est celle de l'utilisateur du script. AppleScript peut souvent être invoqué à partir de l'interface graphique Mac: double-cliquer sur une application AppleScript, ou déposer des fichiers dans une, ou utiliser un menu AppleScript à l'échelle du système ou dans un programme particulier. Des programmes comme Mail peuvent être configurés pour exécuter un AppleScript sur les messages entrants afin de les filtrer. Pour les utilisateurs habitués à utiliser les Mac de manière "Mac" (c'est-à-dire à partir de l'interface graphique), les AppleScripts sont souvent plus accessibles.

Les scripts shell vivent souvent (mais pas toujours) dans le terminal. Si l'on utilise déjà Terminal, exécuter un script shell peut être plus pratique que d'appeler un AppleScript. D'un autre côté, de nombreux utilisateurs sont rebutés en devant taper des commandes dans une fenêtre de terminal, ou même en cliquant sur un fichier de script qui ouvre une fenêtre de terminal pour faire sa magie. Personnellement, je trouve la syntaxe des scripts shell plus lisible que celle des scripts Apple, mais je soupçonne que je suis minoritaire sur celui-ci. Les scripts shell sont familiers aux utilisateurs de nombreux systèmes différents de type Unix.

Dans tous les cas, les deux sont des outils puissants pour mieux contrôler votre Mac.

Daniel
la source
Je vous remercie; cela clarifie certainement la question et confirme certains de mes soupçons.
Noldorin
Je suppose que Tell Application Findercopier des fichiers ouvrira une fenêtre avec une barre de progression visible, mais cppas. Est-ce correct?
TRiG
4

Les autres réponses donnent de grandes vues d'ensemble de haut niveau de l'intention derrière ces deux techniques de script. Je vais peut-être vous donner des exemples de la façon dont je les utilise.

Avec Applescript, j'ai créé des règles de traitement pour Mail, connecté BBEdit à R pour le traitement statistique, créé des actions de dossier complexes et effectué une réorganisation massive et temporelle de mes photos dans iPhoto et Aperture. J'ai également créé des mini-applications avec des boutons et des affichages de texte. Fondamentalement, il s'agit d'une manipulation automatique d'applications complexes avec des interfaces graphiques.

Avec les scripts Bash, j'ai créé des routines de traitement d'image automatique avec Imagemagick, des routines de traitement PDF avec Ghostscript, des routines d'heure et de date, et beaucoup de traitement de texte avec Bash, sed / awk et Perl. Les utilitaires Unix ont tendance à être simples, rapides et flexibles, et Bash est un excellent moyen de les combiner en des outils très puissants et faciles.

J'appelle parfois des scripts Bash à partir d'un Applescript, généralement à des fins de traitement de texte (GREP) ou pour une récupération légère de sites Web (curl). J'utilise presque toujours cette technique pour obtenir un peu de données ou une variable à utiliser plus loin dans mon Applescript.

Cendre
la source
Ah, ces exemples spécifiques sont plutôt utiles. Merci pour cela. Avez-vous des ressources d'apprentissage suggérées pour AppleScript en passant? Pour un débutant complet. (J'ai utilisé un petit script Bash dans le passé et je peux probablement le réapprendre moi-même.)
Noldorin
2
Oui, le livre dont j'ai le plus profité était "AppleScript: The Definitive Guide" de Matt Neuberg. La documentation pour les développeurs d'Apple est correcte et mérite d'être consultée pour référence, mais le livre de Neuberg évalue très honnêtement les forces et les faiblesses du langage. Vous constaterez que l'insistance d'Applescript sur la grammaire "naturelle" n'est pas très naturelle et, dans de nombreux cas, sera contre-intuitive. Neuberg précise quand cela se produit et pourquoi.
Ash
C'est exactement l'impression que j'ai eue en regardant initialement la langue. Cette maison à mi-chemin entre la machine et les langues naturelles semble plutôt maladroite. Vive la recommandation!
Noldorin
3

Cela peut être une simplification excessive, mais les scripts shell sont destinés à combiner des programmes existants pour effectuer de nouvelles tâches tandis qu'AppleScript consiste à contrôler à distance des applications (principalement GUI). Les programmes Unix classiques lisent généralement des entrées et produisent des sorties et les scripts shell vous permettent de les combiner. AppleScript est d'automatiser les applications GUI.

lhf
la source