13 votes

AppleScript vs. Bash script ?

Je suis un utilisateur et un développeur Windows de longue date qui a récemment décidé de passer à Mac OS X. J'ai donc décidé d'en faire mon métier.

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

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

17voto

Robin Robinson Points 1031

Les scripts shell et AppleScripts peuvent être utilisés à peu près partout où l'un ou l'autre est approprié.

Les scripts AppleScripts fonctionnent mieux lorsqu'ils s'adressent aux applications et aux fonctionnalités du système au niveau de l'utilisateur. (Par exemple, vous pouvez dire tell app "iTunes" to play et il le fera, ou tell app "Finder" to open the first file of the second window .)

Les scripts shell scripts (vous avez fait référence à bash) fonctionnent mieux lorsqu'il s'agit de parler aux objets système de bas niveau et aux trucs Unixy.

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

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

Quoi qu'il en soit, le moyen le plus moderne de créer des scripts est Automator, où vous pouvez utiliser soit le shell, soit l'AppleScript (ou les deux), ainsi que des modules préétablis provenant de diverses applications que vous avez installées.

8voto

Daniel Points 32917

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

Les deux langages de script sont des langages de "colle" -- ils peuvent faire un minimum de choses eux-mêmes, et accomplissent plutôt la plupart de leurs tâches en invoquant les capacités d'autres programmes. Les scripts de l'interpréteur de commandes utilisent les pipes d'Unix, tandis qu'AppleScript dispose de l'option tell application la syntaxe.

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

Lorsqu'il s'agit de tâches de gestion de fichiers, les deux approches peuvent fonctionner. L'une peut Tell Application Finder pour copier des fichiers, ou exécuter la commande cp dans un shell script. Alors pourquoi utiliser l'une plutôt que l'autre ? Certes, certains rédacteurs de script sont plus familiers avec un langage 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 : en double-cliquant sur une application AppleScript, ou en déposant des fichiers sur celle-ci, ou en utilisant un menu AppleScript, soit à l'échelle du système, soit 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 Macs d'une manière "similaire" (c'est-à-dire à partir de l'interface graphique), les AppleScripts sont souvent plus accessibles.

Les scripts vivent souvent (mais pas toujours) dans le Terminal. Si l'on utilise déjà le Terminal, exécuter un shell scripts là peut être plus pratique que d'invoquer un AppleScript. D'autre part, de nombreux utilisateurs sont rebutés par le fait de devoir taper des commandes dans une fenêtre de Terminal, ou même de cliquer sur un fichier scripts qui ouvre une fenêtre de Terminal pour faire sa magie. Personnellement, je trouve la syntaxe des scripts shell plus lisible que celle des AppleScripts, mais je soupçonne que je suis en minorité sur ce point. Shell scripts sont familier aux utilisateurs de nombreux systèmes différents de type Unix.

Quoi qu'il en soit, les deux sont des outils puissants pour mieux contrôler votre Mac.

4voto

Ash Points 957

Les autres réponses donnent un excellent aperçu de haut niveau de l'intention derrière ces deux techniques de script. Je vais peut-être me contenter de vous donner des exemples de la façon dont je les utilise.

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

Grâce aux scripts Bash, j'ai créé des routines de traitement automatique d'images avec Imagemagick, des routines de traitement PDF avec Ghostscript, des routines d'affichage de l'heure et de la date, et de nombreux traitements de texte avec Bash, sed/awk et Perl. Les utilitaires Unix ont tendance à être légers, rapides et flexibles, et Bash est un excellent moyen de les combiner en outils très puissants et faciles à utiliser.

Il m'arrive d'appeler des scripts Bash à partir d'un Applescript, généralement à des fins de traitement de texte (GREP) ou pour récupérer des sites web légers (curl). J'utilise presque toujours cette technique pour obtenir un bout de données ou une variable à utiliser plus loin dans mon Applescript.

3voto

Igor Zelaya Points 2266

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

LesApples.com

LesApples est une communauté de Apple où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres utilisateurs d'appareils Apple, poser vos propres questions ou résoudre celles des autres.

Powered by:

X