Mój przepływ pracy Automatora kończy się niepowodzeniem, ponieważ nie można znaleźć polecenia git w poleceniu „Uruchom skrypt powłoki”? Potrzebuję pomocy

20

Mam przepływ pracy Automatora i jednym z działań jest sklonowanie repozytorium. Oto kod akcji „Uruchom skrypt powłoki”. Polecenie jest uruchamiane w powłoce Bash, /bin/bashjeśli ma to znaczenie:

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 .

Teraz aplikacja Automator działa poprawnie na moim komputerze. Ścieżka do git na moim komputerze (Macbook Pro) to: /usr/bin/git( Wydaje mi się, że zainstalowałem git na moim komputerze za pośrednictwem Xcode)

Ale na maszynie mojego współpracownika (także Mac Pro) aplikacja Automator zawodzi. W rzeczywistości dane wyjściowe pliku log.txt mówią:bash: git: command not found

Teraz na komputerze mojego współpracownika ścieżka do git to: usr/local/git/binco, tak, jest inne, ponieważ zainstalował git za pomocą Google Git Installer dla Mac OS X, ale nie sądziłem, że powinno to mieć znaczenie, ponieważ w skrypcie polecenie git nie jest absolutną ścieżką do polecenia, a ponadto mój współpracownik może normalnie uruchamiać git ze skryptu Bash, ale wywoływany bezpośrednio z terminala.

Co więc daje? Dlaczego przepływ pracy automatyzatora działa dla mnie, a nie dla mojego współpracownika?

W Bashie lub Uniksie musi być coś fundamentalnego, czego nie rozumiem, ale się zgubiłem.

racl101
źródło

Odpowiedzi:

36

Skrypty uruchamiane za pomocą Automatora używają domyślnej ścieżki wyszukiwania, która zwykle nie obejmuje /usr/local/bin. W twoim przypadku łatwo byłoby to naprawić

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

gdzieś na początku skryptu.

nohillside
źródło
Próbowałem wkrótce potem i to też nie zadziałało.
racl101
12

Aby uzyskać bardziej ogólne rozwiązanie środowiska bash w automatorze różniącym się od twojego, możesz po prostu załadować swój osobisty profil bash w pierwszym wierszu skryptu bash automatyzatora:

source ~/.bash_profile

Dzięki temu ścieżka i wszelkie inne zmienne środowiskowe, których używasz, są dostępne ze skryptu automatora.

Daniel Schlaug
źródło
Wolę to rozwiązanie. Dobry przegląd skryptów logowania bash jest tutaj
Jay
4

Rozwiązałem ten sam problem z tymi samymi przepływami pracy „usługi” uruchamianymi na różnie skonfigurowanych komputerach, sprawdzając, co się dzieje, gdy terminal uruchamia powłokę, i ostatecznie dodając następujący fragment kodu na początku wszystkich moich działań „Uruchom skrypt skryptu”:

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

Dotyczy to wszystkich przypadków, które do tej pory spotkałem.

silverdr
źródło
1

Jeśli chcesz, aby Workflow działał na obu komputerach, które mają git w różnych lokalizacjach, dodaj każdą lokalizację do zmiennej PATH, o której wspomniała patrix, oddzielając ją :, jak wyjaśniono tutaj: https://developer.apple.com/library/mac /documentation/AppleApplications/Conceptual/AutomatorConcepts/Articles/ShellScriptActions.html

Zatem na samym początku skryptu powłoki przepływu pracy dodajesz:

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

monfresh
źródło