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.
la source
Réponses:
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 play
et ce sera le cas, outell 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 avecosascript -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.
la source
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/osascript
pour appeler un AppleScript et AppleScript a lado shell script
commande), 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 application
syntaxe.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 Finder
copier des fichiers ou exécuter lacp
commande 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.
la source
Tell Application Finder
copier des fichiers ouvrira une fenêtre avec une barre de progression visible, maiscp
pas. Est-ce correct?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.
la source
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.
la source