Automator: Problem mit der Parameterweitergabe

geimist

Mitglied
Thread Starter
Dabei seit
26.08.2011
Beiträge
12
Reaktionspunkte
0
Hallo zusammen,

ich mache sehr selten etwas mit Automator, weshalb ich hier gerade wie die Kuh vorm neuen Tor stehe.

Folgende Vorhaben soll umgesetzt werden:
Mit Automator erstelle ich eine App. Dateien oder Ordner, die auf das App-Icon gezogen werden, sollen an ein Skript innerhalb der App als Parameter übergeben werden. Dazu muss ich einmal den Datei- oder Ordnerpfad übergeben und ich muss den Pfad im System der App auslesen, damit ich das Skript innerhalb der App adressieren kann. Letzteres funktioniert wie gewünscht, aber ich habe es noch nicht geschafft, den Automator-Input weiterzureichen.

Um mir die Parameter zu visualisieren, lasse ich mir im Beispiel diese in eine Datei schreiben (was immer nur den Pfad der App liefert aber halt nicht den Input).

Bildschirmfoto 2023-02-09 um 16.00.50.png

Hat jemand eine Idee?

LG
Stephan
 
Möglicherweise ist Dein Ansatz zu weit hergeholt. Was soll den am Schluss rauskommen nachdem der Ordner oder die Dateien auf die App gezogen wurden?
 
Deren Pfad soll an das 'interne' Skript als Parameter übergeben werden.
 
Das Bashskript macht in dem Fall eine Audiotranskription. Bisher nutze ich das Skript über das Terminal und wollte das jetzt mal etwas eleganter gestalten.

Um es mal ganz herunterzubrechen: Per drag & drop soll ein Skript gestartet werden und der Pfad der gedropten Datei / Ordner als Parameter übergeben werden.

Möglicherweise ist Dein Ansatz zu weit hergeholt. Was soll den am Schluss rauskommen nachdem der Ordner oder die Dateien auf die App gezogen wurden?
Du bringst mich auf den Gedanken, dass möglicherweise noch in AppleScript der Pfad der gedropten Dateien ermittelt werden müsste :unsure:
Aber auch dafür bräuchte ich wohl Unterstützung.
 
"Get value of parameter" und "Set value of parameter" sind zwei Bausteine in Automator. Ausserdem "Get file path" das wirft direkt den Posix-path aus.


A 2023-02-09 um 22.44.06.jpg
 
Das klingt schonmal gut. Danke. Für "Get file path" habe ich gar kein Äquivalent in Deutsch gefunden. Wie heißt es da, bzw. in welcher Kategorie?
 
naja, deine beiden Scripte sind etwas... saltsam / unnötig / fehlerhaft.

Das Apple Script gibt irgendwann auf das return im tell-block für Finder. Und da gibst du den Pfad zurück. Und da du den Pfad als "path to me" definierst, tja, kriegst du halt den Pfad des Scriptes.

Was das mit dem Apple Script soll, frage ich mich aber ohnehin. Warum machst du das Ganze nicht einfach nur als Shell-Script? Und warum willst du eine App erstellen, die ein Shell-Script beinhaltet, dass du aufrufst und machst nicht gleich nur das Shell-Script als App?

Also ganz banal

tempImageBjl1bI.png
 
Das klingt schonmal gut. Danke. Für "Get file path" habe ich gar kein Äquivalent in Deutsch gefunden. Wie heißt es da, bzw. in welcher Kategorie?
Kann ich Dir nicht sagen weil bei mir alles was mit programmieren zu tun hat auf Englisch läuft. Genau aus dem Grund: Wenn ich Anleitungen im Netz finde sind die zu 90% auf Englisch.
 
Was das mit dem Apple Script soll, frage ich mich aber ohnehin. Warum machst du das Ganze nicht einfach nur als Shell-Script?
Das Shell-Skript hat noch ein paar Abhängigkeiten, die auch mit in die App gepackt werden. Die muss ich relativ aufrufen oder deren ablsoluten Pfad kennen (der sich ändern kann, wenn man die App weitergibt). Über einen Shellaufruf in Automator bin ich immer im Benutzer-Homeverzeichnis, aber nicht dort, wo die App liegt.

Beide Informationen sind ja schonmal da, ich kann sie lediglich nicht gemeinsam an das Shellskript übergeben, was ich eigentlich in dem Teil mit dem Apple Script beabsichtigt habe.
 
Shell Scripte nur mit ganzen Pfaden und die möglichen anderen ENV nicht vergessen.
Also user ist nicht user und home ist nicht home.
Wenn du relative Pfade wie ~ benutzt.
 
Das ist schon klar, nur dafür muss ich dem Skript den Pfad der App zusätzlich zum Pfad der übergebenen Datei / Ordner übergeben.

Die Frage ist WIE?
Wo ist der Fehler in meinem Beispiel?
 
Danke für den Link. Damit wird das Apple Script schonmal sauberer. Allerdings muss ich ja immer noch beide Werte an mein Shellskript übergeben. Wie gelingt mir das?

Bildschirm­foto 2023-02-09 um 18.27.16.png


Einfacher wäre es wohl du baust die .app von Hand und in der Info.plist rufst dein Script als exec auf.
Das habe ich noch nie gemacht und erforderte von mir wahrscheinlich noch größere Einarbeitungszeit. Ich dachte, der Automator wäre für mein Anliegen eigentlich geeignet …
 
Warum rufst du nicht dein Script mit do shell script aus dem Applescript direkt auf?

Benutz am besten auch qouted form of Posix Path, sonst musst im Shell Script nacharbeiten.
 
Zuletzt bearbeitet:
Das klingt konsequent. Ich bin hier halt noch unerfahren. 🙈

So würde es meiner Logik nach aussehen, aber der Pfadaufbau ist noch nicht korrekt. Und {input} ist nicht definiert. Wie muss ich das definieren, damit der Automator Input (bzw. dessen Pfade) in {input} gespeichert werden?
AppleScript:
set PathOfMe to POSIX path of (path to me as text)
do shell script {PathOfMe} & "Contents/Scripts/whisper.sh " & {input}
 
Wie muss ich das definieren, damit der Automator Input (bzw. dessen Pfade) in {input} gespeichert werden?

da brauchst du wieder deinen on run handler, da du nur dort Paramter per drag & drop kriegst. Du brauchst auch nur 1 Parameter also

Code:
on run {input}

den musst du dann aber ebenso mit "POSIX path of input" erst für das Shell-Script aufbereiten.
 
Hallo,

AppleScript:
on run {input, parameters}
    copy POSIX path of (path to me) to end of input -- to beginning of input
    return input
end run

Gruß
 
Hallo zusammen,

vielen Dank für eure Zeit und eure Anregungen.

So sieht die Lösung für mich jetzt aus:
AppleScript:
on run {input}
    set PathOfMe to POSIX path of (path to me as text)
    set subPath to "Contents/Scripts/whisper.sh"
    set VarInput to POSIX path of {input}

    do shell script quoted form of PathOfMe & quoted form of subPath & " " & quoted form of VarInput
end run

LG
geimist
 
Zurück
Oben Unten