Mein Automator-Workflow schlägt fehl, weil er den Git-Befehl im Befehl „Run Shell Script“ nicht findet? Brauchen Sie Hilfe

Ich habe einen Automator-Workflow und eine der Aktionen besteht darin, ein Repository zu klonen. Hier ist der Code für die Aktion „Run Shell Script“. Der Befehl wird in der Bash-Shell ausgeführt /bin/bash, falls dies wichtig ist:

SOURCEDIR="${3/\/Volumes/}"

cd "$2"
REPOURL="bob@somedomain.com:$SOURCEDIR"
WORKINGDIR="$1"

# Capture any errors with cloning process in log file
git clone "$REPOURL" "$WORKINGDIR" &> ./log.txt

// For debugging
echo "exit code: $?"
echo "PPID: $PPID"

open .

Jetzt läuft die Automator-App einwandfrei auf meinem Rechner. Der Pfad zu git auf meinem Computer (ein Macbook Pro) lautet: /usr/bin/git(Ich glaube, ich habe git über Xcode auf meinem Computer installiert)

Aber auf dem Computer meines Kollegen (auch ein Mac Pro) schlägt die Automator-App fehl. Tatsächlich sagt die Ausgabe der log.txt-Datei:bash: git: command not found

Jetzt lautet der Pfad zu git auf dem Computer meines Kollegen: usr/local/git/bin, was ja anders ist, weil er git über den Google Git Installer für Mac OS X installiert hat, aber ich dachte nicht, dass es wichtig sein sollte, weil im Skript der git-Befehl ist kein absoluter Pfad zum Befehl und außerdem kann mein Kollege git normal von einem Bash-Skript aus ausführen, aber wenn es direkt vom Terminal aufgerufen wird.

Also was gibt? Warum funktioniert der Automator-Workflow für mich, aber nicht für meinen Kollegen?

Es muss etwas Grundlegendes an Bash oder Unix geben, das ich hier nicht verstehe, aber ich bin verloren.

Antworten (5)

Skripte, die über Automator ausgeführt werden, verwenden den Standardsuchpfad, der normalerweise keine enthält /usr/local/bin. In Ihrem Fall wäre eine einfache Lösung zu setzen

export PATH=/usr/local/bin:$PATH

irgendwo am Anfang des Skripts.

Ich habe es kurz danach tatsächlich versucht und es hat auch nicht funktioniert.
Wie in dem anderen Kommentar erwähnt, kann dieser Ansatz zu schwer zu debuggenden Unterschieden zwischen dem Skriptverhalten in Automator und in Terminal führen. Verwenden Sie besser source ~/.bash_profileoder source ~/.bashrc.

Für eine allgemeinere Lösung für die Bash-Umgebung in Automator, die sich von Ihrer eigenen unterscheidet, können Sie einfach Ihr persönliches Bash-Profil in die erste Zeile des Automator-Bash-Skripts laden:

source ~/.bash_profile

Dadurch werden der Pfad und alle anderen Umgebungsvariablen, an die Sie gewöhnt sind, in Ihrem Automator-Skript verfügbar.

Ich bevorzuge diese Lösung sehr. Eine gute Übersicht über die Bash-Login-Skripte finden Sie hier
Die Mühe, dies für zsh zum Laufen zu bringen, hat source ~/.zprofile nicht geholfen
Ich musste source ~/.zshrc verwenden
Ich denke, das ist viel besser, als nur $PATH zu exportieren, da es möglicherweise viel mehr Einstellungen in Ihrem Bash-Profil gibt, sodass sich dasselbe Skript in Automator möglicherweise anders verhält als in Terminal ohne source ~/.bash_profileoder source ~/.bashrc.
Dadurch wird /urs/local/bin nicht wirklich zu Ihrem Pfad hinzugefügt, es sei denn, Sie haben es aus irgendeinem Grund zu Ihrem Pfad in .bash_profile hinzugefügt. Unter macOS wird /usr/local/bin normalerweise zu Ihrem Pfad hinzugefügt, da es als Zeile in /etc/paths enthalten ist.

Ich habe das gleiche Problem gelöst, dass dieselben „Dienst“-Workflows auf unterschiedlich konfigurierten Computern ausgeführt wurden, indem ich überprüfte, was passiert, wenn das Terminal die Shell startet, und schließlich das folgende Snippet am Anfang aller meiner „Run Shell Script“-Aktionen hinzufügte:

if [ -x /usr/libexec/path_helper ]; then
    eval `/usr/libexec/path_helper -s`
fi
if  [ -f "$HOME"/.profile ]; then
    source "$HOME"/.profile
elif [ -f "$HOME"/.bash_profile ]; then
    source "$HOME"/.bash_profile
elif [ -f "$HOME"/.bashrc ]; then
    source "$HOME"/.bashrc
fi

Dies deckt alle Fälle ab, die mir bisher begegnet sind.

Die einzige Antwort, die für mich in allen Fällen funktioniert. Danke 🙇

Ich weiß nicht, warum eine der anderen Antworten bei mir nicht funktioniert hat, aber wenn Sie Homebrew verwenden, setzen Sie dies an den Anfang des Automator-Skripts.

export PATH=/opt/homebrew/bin:$PATH
Weil Sie einen M1-Mac verwenden, auf dem Homebrew /opt/homebrewanstelle von /usr/local.

Wenn Sie möchten, dass der Workflow auf beiden Computern funktioniert, die Git an unterschiedlichen Orten haben, dann fügen Sie jeden Ort der PATH-Variablen hinzu, die Patrix erwähnt hat, getrennt durch ein :, wie hier erklärt: https://developer.apple.com/library/mac /documentation/AppleApplications/Conceptual/AutomatorConcepts/Articles/ShellScriptActions.html

Ganz oben in Ihrem Workflow-Shell-Skript fügen Sie also Folgendes hinzu:

PATH=/usr/bin:/usr/local/bin
export PATH