AppleScript vs. Bash-Skript?

13

Ich bin ein langjähriger Windows "Power-User" und Entwickler, der sich kürzlich entschieden hat, auf Mac OS X umzusteigen.

Unter OS X Lion und früheren Versionen gibt es offenbar zwei Hauptoptionen für die Skripterstellung und Automatisierung in OS X: AppleScript und Bash-Skript. Letzteres ist natürlich eine direkte Konsequenz von OS X mit der Unix-Bash-Shell, während ersteres Apples eigene Innovation ist. Die Syntax ist eindeutig sehr unterschiedlich, wobei AppleScript einen pseudo-natürlichen Sprachstil aufweist.

Meine Frage ist, ob AppleScript- und Bash-Skripte unter OS X für unterschiedliche Aufgaben und Zwecke verwendet werden (sollten sie auch verwendet werden). Ich bin mir vage bewusst, wie viele Aufgaben ich mit Bash-Skripten ausführen kann, aber natürlich mit Code Für einige Fortgeschrittene kann es schnell zu Verwerfungen kommen. Haben diese beiden Sprachen trotz Apples späterer Erfindung von AppleScript überlappende oder nahezu identische Anwendungsfälle - oder sollen sie für unterschiedliche Szenarien verwendet werden? Ein allgemeiner Überblick sowie einige spezifische Beispiele sind erwünscht.

Noldorin
quelle
Wenn Sie Aufgaben haben, die sich auf Dateien und Ordner beziehen, ist "Hazel" ein wirklich leistungsfähiges, regelbasiertes Tool, das sehr nützlich ist. Es kann auch Shell-Skripte und Apple-Skripte basierend auf Regeln starten.
Stuart Woodward

Antworten:

17

Sowohl Shell- als auch AppleScripts können praktisch überall eingesetzt werden.

AppleScripts funktionieren besser, wenn Sie mit Apps und Systemfunktionen auf Benutzerebene sprechen. (Zum Beispiel können Sie sagen, tell app "iTunes" to playund es wird, oder tell app "Finder" to open the first file of the second window.)

Shell-Skripte (Sie haben auf Bash Bezug genommen) funktionieren besser, wenn Sie mit Systemobjekten auf niedriger Ebene und Unixy-Sachen sprechen.

Sie sind beide interoperabel: Sie können einen Shell-Befehl von AppleScript mit do shell script "command here"aufrufen und Sie können AppleScript-Code von der Shell mit aufrufen osascript -e "AppleScript". Darüber hinaus gibt es eine gewisse Überschneidung zwischen beiden (insbesondere bei Dateisystemoperationen).

Es gibt sicherlich mehr Ressourcen zum Erlernen von Shell-Skripten online als AppleScript, und es hilft nicht, dass AppleScript den Ruf hat, eine "Nur-Lese-Sprache" zu sein (dh schwieriger zu schreiben als zu lesen).

Die modernste Methode zum Erstellen von Skripten ist in jedem Fall Automator, wo Sie entweder Shell- oder AppleScripting (oder beides) zusammen mit vorgefertigten Modulen aus verschiedenen von Ihnen installierten Apps verwenden können.

Cajunluke
quelle
Vielen Dank; Das ist eine sehr informative Übersicht. Haben Sie Empfehlungen für gute Lernressourcen zu AppleScript? (Bash-Skript auch, obwohl ich diese wahrscheinlich ziemlich leicht selbst finden konnte.)
Noldorin
3
AppleScript hat den Ruf (etwas verdient), schreibgeschützt zu sein. Shell-Skripte neigen manchmal zum "Nur-Schreiben" -Ende des Spektrums.
Daniel
@Noldorin Ich habe ein Buch gekauft, um AppleScript zu lernen, benutze aber in der Regel zuerst Google und dann den Index des Buches, wenn ich mich an die Syntax eines bestimmten Befehls erinnern möchte.
Cajunluke,
@ CajunLuke: Ah, fair genug. Wie haben Sie AppleScript zum ersten Mal gelernt?
Noldorin
@Noldorin Ziemlich viel Versuch und Irrtum und Google. Einige Dinge sind schwer für Google, deshalb habe ich das Buch gekauft.
Cajunluke
8

Während jeder Skriptkontext alles kann , was der andere kann (da Shell-Skripte aufrufen können /usr/bin/osascript, um ein AppleScript aufzurufen, und AppleScript den do shell scriptBefehl hat), gibt es tatsächlich Kontexte, für die einer besser geeignet ist als der andere.

Beide Skriptsprachen sind "Klebesprachen" - sie können minimale Dinge selbst erledigen und stattdessen die meisten ihrer Aufgaben durch Aufrufen der Funktionen anderer Programme erledigen. Shell-Skripte verwenden Unix-Pipes, während AppleScript die tell applicationSyntax verwendet.

Sie unterscheiden sich darin, dass AppleScripts direkt mit skriptfähigen Anwendungen (fast immer GUI-Anwendungen) kommunizieren, während Shell-Skripts hauptsächlich mit Befehlszeilenprogrammen (von denen einige grafische Benutzeroberflächen aufrufen können, viele jedoch nicht) kommunizieren.

Wenn es um Dateiverwaltungsaufgaben geht, können beide Ansätze funktionieren. Sie können Tell Application FinderDateien kopieren oder den cpBefehl in einem Shell-Skript ausführen . Warum also übereinander verwenden? Gewiss sind einige Drehbuchautoren mit einer Sprache besser vertraut als mit der anderen und werden es daher vorziehen, dieses Tool zu verwenden. Eine bessere Überlegung ist jedoch der Benutzer des Skripts. AppleScript kann häufig über die Mac-Benutzeroberfläche aufgerufen werden: Doppelklicken auf eine AppleScript-Anwendung oder Ablegen von Dateien auf einer oder Verwenden eines AppleScript-Menüs entweder systemweit oder innerhalb eines bestimmten Programms. Programme wie Mail können so eingerichtet werden, dass bei eingehenden Nachrichten ein AppleScript ausgeführt wird, um diese zu filtern. Für Benutzer, die daran gewöhnt sind, Macs auf "Mac-artige" Weise (dh über die GUI) zu verwenden, sind AppleScripts häufig besser zugänglich.

Shell-Skripte befinden sich häufig (aber nicht immer) im Terminal. Wenn Sie bereits Terminal verwenden, ist das Ausführen eines Shell-Skripts möglicherweise bequemer als das Aufrufen eines AppleScript. Andererseits müssen viele Benutzer Befehle in ein Terminalfenster eingeben oder auf eine Skriptdatei klicken, die ein Terminalfenster öffnet, um ihre Magie zu entfalten. Ich persönlich finde die Syntax von Shell-Skripten besser lesbar als die von Apple-Skripten, aber ich vermute, dass ich in dieser Hinsicht in der Minderheit bin. Shell-Skripte sind Benutzern vieler verschiedener Unix-ähnlicher Systeme vertraut.

In jedem Fall sind beide leistungsstarke Tools, um eine bessere Kontrolle über Ihren Mac zu erlangen.

Daniel
quelle
Vielen Dank; Dies klärt die Angelegenheit auf jeden Fall und bestätigt einige meiner Vermutungen.
Noldorin
Ich vermute, dass Tell Application Finderzum Kopieren von Dateien ein Fenster mit einem sichtbaren Fortschrittsbalken geöffnet wird, während dies cpnicht der Fall ist. Ist das richtig?
TRiG
4

Die anderen Antworten geben einen guten Überblick über die Absichten dieser beiden Skripttechniken. Vielleicht gebe ich Ihnen nur Beispiele, wie ich sie benutze.

Mit Applescript habe ich Verarbeitungsregeln für E-Mail erstellt, BBEdit für die statistische Verarbeitung mit R verbunden, komplexe Ordneraktionen erstellt und meine Fotos in iPhoto und Aperture massiv zeitbasiert neu organisiert. Ich habe auch Mini-Apps mit Schaltflächen und Textanzeigen erstellt. Grundsätzlich handelt es sich hierbei um die automatische Manipulation komplexer Apps mit GUIs.

Mit Bash-Skripten habe ich automatische Bildverarbeitungsroutinen mit Imagemagick, PDF-Verarbeitungsroutinen mit Ghostscript, Zeit- und Datumsroutinen und viele Textverarbeitungsroutinen mit Bash, sed / awk und Perl erstellt. Unix-Dienstprogramme sind in der Regel schlank, schnell und flexibel, und Bash ist eine großartige Möglichkeit, sie zu sehr leistungsstarken und einfachen Tools zu kombinieren.

Manchmal rufe ich Bash-Skripte aus einem Applescript heraus auf, normalerweise zu Textverarbeitungszwecken (GREP) oder zum leichten Abrufen von Websites (Curl). Ich verwende diese Technik fast immer, um ein bisschen Daten oder eine Variable zu erhalten, die ich in meinem Applescript weiter verwenden kann.

Asche
quelle
Ah, diese spezifischen Beispiele sind ziemlich hilfreich. Danke dafür. Haben Sie übrigens Lernressourcen für AppleScript vorgeschlagen? Für einen absoluten Anfänger. (Ich habe in der Vergangenheit ein kleines Bash-Skript verwendet und kann es wahrscheinlich selbst neu lernen.)
Noldorin
2
Ja, das Buch, von dem ich am meisten profitiert habe, war Matt Neubergs "AppleScript: The Definitive Guide". Apples Entwicklerdokumentation ist in Ordnung und es lohnt sich, sie zu Rate zu ziehen, aber in Neubergs Buch werden sowohl die Stärken als auch die Schwächen der Sprache ganz ehrlich bewertet. Sie werden feststellen, dass das Beharren von Applescript auf "natürlicher" Grammatik nicht sehr natürlich ist und in vielen Fällen nicht intuitiv ist. Neuberg klärt, wann das passiert und warum.
Ash
Das ist genau der Eindruck, den ich beim ersten Blick auf die Sprache hatte. Dieses Haus auf halbem Weg zwischen Maschinensprache und natürlicher Sprache scheint ziemlich umständlich. Prost auf die Empfehlung!
Noldorin
3

Möglicherweise ist es zu einfach, aber Shell-Scripting dient zum Kombinieren vorhandener Programme, um neue Aufgaben auszuführen, wohingegen AppleScript (hauptsächlich GUI) -Anwendungen fernsteuern soll. Klassische Unix-Programme lesen normalerweise einige Eingaben und erzeugen einige Ausgaben. Mit Shell-Skripten können Sie diese kombinieren. AppleScript soll GUI-Anwendungen automatisieren.

lhf
quelle