Мій робочий процес Automator не вдається, оскільки він не може знайти команду git в команді «Запустити скрипт оболонки»? Потрібна допомога


20

У мене є робочий процес Автоматизатора, і одна з дій полягає в клонуванні сховища. Ось код дії "Запустити скрипт оболонки". Команда виконується в оболонці Bash, /bin/bashякщо це має значення:

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 .

Тепер додаток Automator працює на моїй машині. Шлях до git на моїй машині (Macbook Pro): /usr/bin/git(я вважаю, що я встановив git на своїй машині через Xcode)

Але на машині мого колеги (також Mac Pro) програма Automator виходить з ладу. Фактично, висновок файлу log.txt говорить:bash: git: command not found

Тепер на машині мого колеги шлях до git такий:, usr/local/git/binщо, так, відрізняється тим, що він встановив git через Google Git Installer для Mac OS X, але я не вважав, що це має значення, оскільки в сценарії команда git це не абсолютний шлях до команди, і більше того, мій колега може запускати git нормально зі сценарію Bash, але при виклику безпосередньо з Терміналу.

То що дає? Чому робочий процес автоматизатора працює для мене, а не для мого колеги?

У Bash чи Unix повинно бути щось принципове, чого я тут не розумію, але я загублений.

Відповіді:


36

Сценарії, запущені через Automator, використовують шлях пошуку за замовчуванням, який зазвичай не включає /usr/local/bin. У вашому випадку було б легко виправити

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

десь на початку сценарію.


Я насправді спробував незабаром після цього, і це не вийшло.
racl101

12

Для більш загального рішення середовища bash в автоматизаторі, що відрізняється від вашого власного, ви можете просто завантажити свій особистий профіль bash в перший рядок скрипту bash на автоматизаторі:

source ~/.bash_profile

Це зробить шлях та будь-які інші змінні середовища, якими ви звикли користуватися, доступними в сценарії автоматизатора.


Я дуже віддаю перевагу цьому рішенню. Хороший огляд сценаріїв для входу в баш тут
Jay

4

Я вирішив ту саму проблему тих самих робочих процесів "служби", які виконуються на різних конфігурованих машинах, перевіривши, що відбувається, коли термінал запускає оболонку, і, врешті-решт, додавши наступний фрагмент до вершини всіх моїх дій "Запустити скрипт оболонки":

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

Це стосується всіх випадків, з якими я стикався досі.


1

Якщо ви хочете, щоб Workflow працював на обох машинах, які мають git в різних місцях, то додайте кожне місце до змінної PATH, про яку згадується патрикс, розділеної символом a :, як пояснено тут: https://developer.apple.com/library/mac /documentation/AppleApplications/Conceptual/AutomatorConcepts/Articles/ShellScriptActions.html

Отже, в самому верху сценарію оболонки робочого процесу ви додасте:

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

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.