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="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 .

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.

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.


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.


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.


Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.