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.
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.
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.
source ~/.bash_profile
oder source ~/.bashrc
.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.
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
/opt/homebrew
anstelle 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
racl101
Martin Hepp
source ~/.bash_profile
odersource ~/.bashrc
.