Automator führt mein Bash-Shell-Skript nicht aus

Ich habe ein Bash-Skript , das wie ein Thread funktioniert. Jetzt möchte ich es in einen Dienst mit Automator verwandeln.

Input ist in Automator auf Image Files gesetzt und die Shell-Script-Aktion ist auf Pass input as arguments.

Das Problem:

Automator beanstandet zwei Dinge:

  1. Die Funktion
  2. Die if-Bedingung

Im Protokoll wird jedoch kein Fehler angezeigt und das Ergebnis des Shell-Skripts ist leer:

(
  ""
)

Was das Skript macht:

Die Funktion createDatePath prüft, ob das übergebene Bild wie folgt formatiert ist 2020-08-10-demo_image.jpgund erstellt einen Ordner YEAR/MONTH/im Zielverzeichnis. Die if-Bedingung führt Aktionen für die Eingabe aus, je nachdem, ob es sich um ein JPEG oder ein PNG handelt und ob auf die Datumszeichenfolge eine Zeichenfolge folgt -qq-. Dies ist eine abgespeckte Version des Skripts (ich habe einige oder mehr if-Bedingungen, aber wir brauchen sie hier nicht, denke ich).

Das Skript:

backup=/Users/me/Desktop/A/backup/
targetPath=/Users/me/Desktop/A/output/

function createDatePath {
    [[ "$i" =~ ^([0-9]{4})-([0-9]{2}) ]] && \
    mkdir -p "$targetPath${BASH_REMATCH[1]}/${BASH_REMATCH[2]}";
}
for i in "$@"; do
    cp "$i" "$backup"
    if [[ "$i" =~ ^([0-9]{4})-([0-9]{2})-([0-9]{2})-([^q]{2}).+\.((jpg)|(jpeg))$ ]]; then
        createDatePath;
    else
        exit 0;
    fi
done

Bildschirmfoto:

Demo-Modus

Link zum vollständigen Shell-Skript: https://gist.github.com/pattulus/a89be63478174853d667

Wenn mir jemand erklären könnte, warum das nicht funktioniert und wie man es zum Laufen bringt, wäre das großartig.

PS: Im Nicht-Automator-Skript war das erste, was ich getan habe, cdder Quellpfad, aber da dies als Dienst enden wird, der Dateien als Eingabe verwendet, war meine Vermutung, dass ich dies weglassen kann (Hinzufügen hat cd "$@"nichts gebracht ).

Können Sie einen Screenshot des Automator-Workflows hinzufügen (oder zumindest einen Link zu einem Screenshot)?
@patrix Ich habe einen Screenshot und einen Link zu einem Kern des vollständigen Skripts hinzugefügt. Wenn dies funktioniert, lösche ich die Aktion "Get Finder selection" und setze die Eingabe auf den Empfang von Bildern.

Antworten (1)

Die Argumente, die Automator an das Skript übergibt, sind absolute Pfade. Sie können sie mit etwas wie in Basisnamen umwandeln i=${i##*/}.

Mein handgefertigtes Ehrenzeichen hast du dir wirklich verdient, weil du zur richtigen Zeit am richtigen Ort warst.