Wie kann eine vorhandene AppleScript-Datei als Dienst verwendet werden?

11

Ich habe ein AppleScript erstellt und es als Datei in einem bestimmten Ordner auf meiner Festplatte gespeichert. Jetzt möchte ich ihm eine Verknüpfung zuweisen und es sieht so aus, als Run AppleScriptmüsste ich einen Service über Automator erstellen , aber der fordert mich auf, den Code einzufügen, während ich die bereits vorhandene .scpt-Datei ausführen möchte. Wie geht das?

Nakilon
quelle

Antworten:

9

Ja, Automator ist hier die beste Option. Gehen Sie folgendermaßen vor, um den Dienst zu erstellen:

  1. Öffnen Sie Automator und wählen Sie Service:

    Geben Sie hier die Bildbeschreibung ein

  2. Suchen Sie nach "Applescript" und ziehen Sie die Aktion in den rechten Bereich:

    Geben Sie hier die Bildbeschreibung ein

  3. Wechseln Sie Service receives selected textzu, Service receives no inputdamit es immer im Menü Dienste angezeigt wird:

    Geben Sie hier die Bildbeschreibung ein

  4. Ersetzen (* Your script goes here *)durch:

    do shell script "/usr/bin/osascript /path/to/your/script.scpt"

    wenn Sie Ihre vorhandene .scptDatei ausführen möchten . Beachten Sie, dass Osascript keine Benutzerinteraktion wie das Anzeigen eines Dialogfensters verarbeiten kann:

    Geben Sie hier die Bildbeschreibung ein

    Um diese Einschränkung zu überwinden, verwenden Sie entweder diese Problemumgehung oder ersetzen Sie sie einfach durch (* Your script goes here *)den Inhalt Ihres Skripts.

  5. Speichern Sie es:

    Geben Sie hier die Bildbeschreibung ein

  6. Wenn Sie möchten, können Sie Ihrem neuen Dienst eine Verknüpfung zuweisen. Wählen Sie im Finder (oder eine geöffnete Anwendung) Dienste> Diensteinstellungen aus:

    Geben Sie hier die Bildbeschreibung ein

  7. Weisen Sie einen nicht so häufigen Shorcut zu:

    Geben Sie hier die Bildbeschreibung ein

  8. Jetzt ist Ihr Dienst von jeder Anwendung aus über die Verknüpfung zugänglich, die Sie im vorherigen Schritt zugewiesen haben:

    Geben Sie hier die Bildbeschreibung ein

Wenn Sie den geöffneten Dienst jemals entfernen möchten ~/Library/Services, löschen Sie den Dienst und leeren Sie den Papierkorb:

Geben Sie hier die Bildbeschreibung ein

jaume
quelle
Ich sagte, ich möchte eine vorhandene Skriptdatei ausführen und nicht erneut in Automator schreiben.
Nakilon
Ich dachte, das Kopieren / Einfügen wäre in Ordnung, aber ja, Sie haben Recht, es wird in Ihrer Frage klar angegeben. Verwenden Sie osascript, wie in anderen Antworten erläutert.
Jaume
@Nakilon Ich habe hinzugefügt, wie Sie osascriptin Automator Ihre .scptDatei ausführen , eine Einschränkung und zwei Problemumgehungen.
Jaume
Ich habe das gerade gemacht. Es funktionierte; Das Starten des Skripts dauert jetzt 4 bis 5 Sekunden. (Als der Code direkt im Workflow gespeichert wurde, wurde er fast sofort gestartet.) Haben Sie eine Idee, was dies verursacht oder wie er schneller gestartet werden kann?
Zack
1
@Zack Danke, ich weiß nicht, warum osascript4 zusätzliche Sekunden benötigt werden, um Ihr Skript auszuführen, aber Automator ist nicht die Ursache für die Verzögerung, die mein Anliegen war. Sie können debuggen osascript, siehe opensourcehacker.com/2011/12/02/… und stackoverflow.com/questions/31045575/…
jaume
4

Fügen Sie im Skript ein on runArgument hinzu:

on run
    -- do whatever the script does
end run

Anschließend können Sie die Automator-Aktion "Shell-Skript ausführen" mit dem folgenden osascriptBefehl verwenden:

osascript /path/to/script.scpt

osascriptist ein Befehl, der AppleScript in der Shell ausführt. Sie benötigen die Zeilen im Skript, damit das Skript außerhalb des AppleScript-Editors ausgeführt werden kann.

alexwlchan
quelle
1
Sie müssen keinen expliziten Run-Handler einfügen. Alle Skripte haben einen impliziten Run-Handler. Der Grund, warum die Apple Apple-Aktion "Ausführen" einen expliziten Ausführungshandler enthält, liegt möglicherweise darin, dass Automator das spezielle on run {input, arguments}Formular verwendet, aber selbst in Automator können Sie den Ausführungshandler einfach entfernen.
Lri
1
@ ͏͏͏ Ich frage mich, ob dieser Ping dich erreicht. Ein großes Lob an die kreative Namensauswahl.
bmike
3

Vielleicht möchten Sie sich diesen Dienst ansehen , mit dem Sie "Mac OS X-Dienste aus einem beliebigen Skript erstellen" können.

Peter
quelle
1
Können Sie hier eine Antwort geben und nicht nur einen Link
user151019
2

Ich würde nicht empfehlen, Automator-Dienste zu erstellen, um Skripten Verknüpfungen zuzuweisen. In 10.7 und 10.8 gibt es einen Fehler, bei dem die Tastaturkürzel für Automator-Dienste nicht immer funktionieren, bis Sie den Mauszeiger über das Dienstemenü in der Menüleiste bewegen. Es gibt auch eine relativ lange Verzögerung (möglicherweise 0,1 bis 1 s), bevor Dienste ausgeführt werden.

In dieser Antwort finden Sie weitere Möglichkeiten zum Zuweisen von Tastaturkürzeln zu Skripten. Ich benutze FastScripts und Alfred selbst.

Lri
quelle
Ich habe dieses Bedürfnis, zu schweben, noch nie erlebt? Haben Sie mehr Details darüber, wovon Sie sprechen
Markhunte
1
Ich bin nicht sicher, ob es alle OS X-Installationen oder alle Dienste betrifft, aber ich bin bei verschiedenen Installationen mehrmals darauf gestoßen, und es wurde von anderen Leuten hier und bei Super User erwähnt. Gelegentlich funktionieren die Tastaturkürzel für alle Automator-Dienste nicht mehr (oder es passiert nichts, wenn Sie sie drücken), aber sie funktionieren wieder, wenn Sie mit der Maus über das Dienstemenü in der Menüleiste fahren oder wenn Sie beispielsweise einen Dienst mit der Maus auswählen.
Lri
2

Sie können das vorhandene Skript mit einem einfachen Automator-Dienst wie diesem ausführen. Und weisen Sie Ihre Verknüpfung wie gewohnt über die Tastaturkürzel zu. Denken Sie daran, dass einige Anwendungen möglicherweise neu gestartet werden müssen, bevor sie die Verknüpfungen übernehmen.

Beispiel.

sayHello-Skript:

say "hello"

Automator-Service: Geben Sie hier die Bildbeschreibung ein

Was in diesem Beispiel verwendet:

  • Keine Eingabe
  • Jede Anwendung.

Die Aktion ist ein Shell-Skript ausführen. Der Code verwendet nur den Unix-Befehl osascript und den Pfad zur Datei. Die Eingabe kann an stdn oder an argument übergeben werden

Das ist nichts Besonderes, was mit dem Skript gemacht werden muss.

Weitere Details zum Befehl osascript finden Sie in den Manpages . Die Manpage enthält ein weiteres Beispiel, in dem Sie Argumente an das Skript übergeben können.

markhunte
quelle
0

Um einen Service zu entwickeln, benötigen Sie eine Software, mit der ein Service wie der folgende erstellt wird:

  1. Automator zum Erstellen eines Workflows
  2. ThisService zum Erstellen eines .service
  3. Xcode zum Erstellen einer .app

Alle oben genannten Arten von Dienstleistungen sind Pakete. Dies sind alles Ordner, die eine Liste enthalten, die die Attribute eines Dienstes angibt.

So habe ich einen Dienst mit Automator erstellt, der eine Automator-Aktion "AppleScript ausführen" verwendet, um ein vorhandenes .script aufzurufen.

Automator-Dienst, der ein vorhandenes AppleScript aufruft

Kaydell
quelle