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.
quelle
Antworten:
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 play
und es wird, odertell 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 aufrufenosascript -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.
quelle
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 dendo shell script
Befehl 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 application
Syntax 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 Finder
Dateien kopieren oder dencp
Befehl 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.
quelle
Tell Application Finder
zum Kopieren von Dateien ein Fenster mit einem sichtbaren Fortschrittsbalken geöffnet wird, während diescp
nicht der Fall ist. Ist das richtig?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.
quelle
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.
quelle