Mein Automator-Workflow schlägt fehl, weil der Befehl git im Befehl "Shell-Skript ausführen" nicht gefunden wird. Brauchen Sie Hilfe

20

Ich habe einen Automator-Workflow und eine der Aktionen besteht darin, ein Repository zu klonen. Hier ist der Code für die Aktion "Shell-Skript ausführen". Der Befehl wird in der Bash-Shell ausgeführt, /bin/bashwenn es darauf ankommt:

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

cd "$2"
REPOURL="[email protected]:$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 zum Git auf meinem Computer (A 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 lautet die Ausgabe der Datei log.txt wie folgt:bash: git: command not found

Jetzt ist der Pfad zu git auf dem Computer meines Kollegen:, usr/local/git/binwas 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 Befehl git steht ist kein absoluter Pfad zum Befehl und außerdem kann mein Kollege git normal von einem Bash-Skript ausführen, aber wenn er direkt vom Terminal aus aufgerufen wird.

Also was gibt es? Warum funktioniert der Automator-Workflow bei mir, nicht aber bei meinem Kollegen?

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

racl101
quelle

Antworten:

35

Skripte, die über Automator ausgeführt werden, verwenden den Standardsuchpfad, der normalerweise nicht enthalten ist /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.

nohillside
quelle
Ich habe es tatsächlich kurz danach versucht und es hat auch nicht funktioniert.
racl101
12

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

source ~/.bash_profile

Dadurch werden der Pfad und alle anderen Umgebungsvariablen, die Sie verwenden, in Ihrem Automator-Skript verfügbar.

Daniel Schlaug
quelle
Ich bevorzuge diese Lösung sehr. Eine gute Übersicht über die Bash-Anmeldeskripte finden Sie hier
Jay
4

Ich habe das gleiche Problem gelöst, dass dieselben "Service" -Workflows auf unterschiedlich konfigurierten Computern ausgeführt werden, indem ich überprüft habe, was passiert, wenn das Terminal die Shell startet, und schließlich den folgenden Snippet am Anfang aller meiner "Run Shell Script" -Aktionen hinzugefügt habe:

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, auf die ich bisher gestoßen bin.

Silberdr
quelle
1

Wenn Sie möchten, dass der Workflow auf beiden Computern funktioniert, auf denen Git an verschiedenen Orten installiert ist, fügen Sie jeden Ort der von patrix erwähnten PATH-Variablen hinzu, die durch ein getrennt ist :, wie hier erläutert: https://developer.apple.com/library/mac /documentation/AppleApplications/Conceptual/AutomatorConcepts/Articles/ShellScriptActions.html

Ganz oben in Ihrem Workflow-Shell-Skript würden Sie also Folgendes hinzufügen:

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

monfrisch
quelle