Automator buggy? - AppleScript als Service im Kontextmenü

mausfang

mausfang

Aktives Mitglied
Thread Starter
Dabei seit
04.08.2016
Beiträge
2.948
Reaktionspunkte
1.282
Hallo Leute,

das Thema hat mich ganz schön Nerven gekostet. Ich befasse mich gerade mit dem Automator (Mojave 10.14.4).
  • Im Kontextmenü eines Ordners möchte ich ein AppleScript laufen lassen.
  • Das Script soll den ausgewählten Ordner als Argument für ein Shellscript übergeben.
  • Ich habe mit viel gegoogle ein funktionierendes Script erarbeitet.
Code:
on run {input, parameters}
    set thePath to input as alias
    set thePath to quoted form of POSIX path of thePath
    --display dialog of thePath
    if application "Terminal" is running then
        tell application "Terminal"
            # do script without "in window" will open a new window      
            do script "cd " & thePath & "; clear; if [ -d .git ] ; then git status; else echo -e \"\\033[1;31mNot a git repository! \\033[0m\"; fi"
           
            activate
        end tell
    else
        tell application "Terminal"
            # window 1 is guaranteed to be recently opened window      
            do script "cd " & thePath & "; clear; if [ -d .git ] ; then git status; else echo -e \"\\033[1;31mNot a git repository! \\033[0m\"; fi"
            activate
        end tell
    end if
    tell application "System Events"
        -- keystrokes always go to the frontmost application
        set frontmost of application process "Terminal" to true
        --keystroke newKey using command down
    end tell
    return input
end run

Das Problem:
  • Wenn ich im Automator den Schritt "Ausgewählte Finderobjekte abfragen" integriere, dann funktioniert das Ganze im Automator.
    • Allerdings bekomme ich wenn ich es dann im Finder im Kontextmenü benutze folgende Fehlermeldung:
      Bildschirmfoto 2019-05-17 um 17.59.21.png
    • Das ausgewählte Finder-Objekt wird offenbar doppelt ans AppleScript durchgereicht.
  • Wenn ich im Automator den Schritt "Ausgewählte Finderobjekte abfragen" weglasse, dann funktioniert das Ganze im Finder.
    • Allerdings bekomme ich dann wenn ich im Automator auf Play drücke:
      Bildschirmfoto 2019-05-17 um 17.58.13.png
    • Das ausgewählte Finder wird im Automator gar nicht ans AppleScript durchgereicht.
WTF?

Ähm. Zum Debuggen irgendwie blöd. Entweder das Ganze läuft im Automator und dann im Finder nicht, oder umgekehrt. Was mache ich falsch? Mache ich etwas falsch?
 
Läuft das Skript, wenn du es als Programm für den Finder speicherst?
 
Da ich gleich unterwegs bin und falls es im Finder läuft (meine vorherige Frage), setzte mal diese Zeilen im Automator...

Code:
 set thePath to input as alias
   set thePath to quoted form of POSIX path of thePath
   --display dialog of thePath

... vor
Code:
on run {input, parameters}
Also so:
Code:
    set thePath to input as alias
    set thePath to quoted form of POSIX path of thePath
    --display dialog of thePath

on run {input, parameters}
    if application "Terminal" is running then
        tell application "Terminal"

Das war gerade bei mir der Grund, warum ein Skript, welches als Programm im Finder wunderbar lief, im Automator-Dienst für das Kontextmenü nicht lief. Nach der Zeilenumstellung ging es. Viel Glück.
 
  • Gefällt mir
Reaktionen: mausfang
Läuft das Skript, wenn du es als Programm für den Finder speicherst?
Geht das, wenn der „Input“ aus dem Kontextmenü benötigt wird?

Außerdem habe ich ja beschrieben, dass das Programm funktioniert, und dass es eben die entsprechenden Fehler wirft. Je nach dem. Entweder wird kein Objekt als Input in das Skript gegeben, oder der Pfad ist seltsamerweise doppelt im Input.
 
lso so:
Code:
set thePath to input as alias
set thePath to quoted form of POSIX path of thePath
--display dialog of thePath

on run {input, parameters}
if application "Terminal" is running then
tell application "Terminal"
Das war gerade bei mir der Grund, warum ein Skript, welches als Programm im Finder wunderbar lief, im Automator-Dienst für das Kontextmenü nicht lief. Nach der Zeilenumstellung ging es. Viel Glück.
Ich kann mir nicht vorstellen, dass das bei Dir laufen kann! Aber wenn Du es sagst:
Bildschirmfoto 2019-05-18 um 14.29.39.png

Das passiert zumindest bei mir.

Und das ist ja auch logisch. Vor der Funktion "on run" kann und darf nichts stehen. Nur der Code der dazwischen steht wird ausgeführt.
 
Ja klar, das Skript kann man auch über den Finder starten. Bei mir war es ein Skript, welches den Dateinamen einer markierten Datei an eine Spotlight Suche weiter gegeben hat, um zu schauen, ob ich von der Datei noch irgendwo Namens-Duplikate auf dem Rechner habe.

Einfach das Skript im Skript-Editor mit "Speichern unter" als Programm im Skriptordner des Computers abspeichern. Dann die Datei, um die es geht, markieren und das Skript über das Skriptmenü in der Menüleiste (muss in den Skript-Editor Einstellungen ausgewählt sein) starten. Oder wahlweise über das Dock (Skriptordner des Computers dort reinziehen). Dann kannst du Skripte starten, die sich auf markierte Dateien beziehen. Das geht auch mit Launchern. Das Skript ist ja ein Programm.

Wichtig: das Skript nicht direkt doppelklicken. Dann wendet es sich auf sich selbst an ;-)

Da mir die Auswahl über das Skriptmenü zu umständlich war, wollte ich es auch im Kontextmenü haben und direkt anwenden können, wenn ich eh gerade mit der Maus bei der Datei bin. Wenn es so rum geht, müsse es doch bei dir auch andersrum gehen.

Soweit ich weiß, kann man alles, was man über das Kontextmenü mit Dateien macht, auch über das Skriptmenü erledigen. Ich Tagge seit Jahren meine Dateien so. Also Datei markieren, Skript starten und entweder System Tags anfügen oder Tags in den Dateinamen schreiben. Eine Zeit lang habe ich das über eine Launcher App auf dem iPad gemacht und mittlerweile habe ich das StreamDeck von Elgato dafür. Das Kontextmenü verwende ich eher selten für sowas.
 
Zuletzt bearbeitet:
Ich wollte damit auch nur sagen: wenn es im Finder als Applescript läuft, liegt es wahrscheinlich am Automator und wenn es auch im Finder als Applescript nicht läuft, liegt es am Skript.

Is jedenfalls meine Vermutung. Da ich aber weit entfernt davon bin, ein Applescript Experte zu sein, würde ich im Zweifelsfall mal abwarten, was die echten Experten dazu sagen. Dein Problem sah auf den ersten Blick aus, wie das Problem, welches ich auch gerade hatte. Scheint aber nicht der Fall zu sein.

Viel Glück, dass du hier noch kompetentere Hilfe als mich findest. Sollte aber nicht schwer sein :-D

Btw. das hier ist das Skript, von dem ich geredet habe. LINK
 
Hallo,

Wenn ich im Automator den Schritt "Ausgewählte Finderobjekte abfragen" weglasse, dann funktioniert das Ganze im Finder.
  • Allerdings bekomme ich dann wenn ich im Automator auf Play drücke:
Ich würde dann beim Ausführen folgende Meldung bekommen:

Diese Schnellaktion empfängt keine Eingabe bei Ausführung in Automator.

Um diese Schnellaktion in Automator zu testen, füge die Aktion „Angegebene Finder-Objekte abfragen“ zum Anfang deines Arbeitsablaufs hinzu. Entferne oder deaktiviere die Aktion, bevor du den Arbeitsablauf außerhalb von Automator ausführst.
Wähle im Automator Menü die "Warnhinweise zurücksetzen" und du solltest diese Meldung auch bekommen.
Sie sollte eigentlich auch deine Fragen beantworten, oder?

Da ist nix buggy!

- - - - - - - - - - -
Und warum wird wohl in deinem Beispiel der ausgewählte Ordner "doppelt ans AppleScript durchgereicht"? Etwa, weil man ihn doppelt durchreicht?!
Und da liegt übrigens auch eine der Schwachstellen deines Skripts. Wird mehr als ein Objekt übergeben, wird es einen Fehler auswerfen...ich denke aber, damit kannst du leben.

Gruß
 
Und da liegt übrigens auch eine der Schwachstellen deines Skripts. Wird mehr als ein Objekt übergeben, wird es einen Fehler auswerfen...ich denke aber, damit kannst du leben.
Ok, danke für den Hinweis! Damit kann ich was anfangen. Ich werde vor Ausführung prüfen wie viele items ich in der Liste habe.

Ich verstehe aber immer noch nicht, warum sich das Skript bei Ausführung im Finder und im Automator jeweils anders verhält.

Deine Anregungen werde ich auf jeden Fall durchprüfen. Das ist mein zweiter Automator-Service. (Muss mich da erst reinfinden.)
 
Zurück
Oben Unten