Мой рабочий процесс Automator завершается ошибкой, потому что не удается найти команду git в команде «Выполнить сценарий оболочки»? Нужна помощь

20

У меня есть рабочий процесс Automator, и одно из действий заключается в клонировании хранилища. Вот код для действия «Выполнить сценарий оболочки». Команда запускается в оболочке 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 должно быть что-то фундаментальное, чего я здесь не понимаю, но потерян.

racl101
источник

Ответы:

35

Скрипты, запускаемые через Automator, используют путь поиска по умолчанию, который обычно не включает /usr/local/bin. В вашем случае легко исправить

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

где-то в начале сценария.

Nohillside
источник
Я действительно попытался вскоре после этого, и это тоже не сработало.
racl101
12

Для более общего решения среды Bash в Automator, отличной от вашей, вы можете просто загрузить свой личный профиль Bash в первой строке сценария Bash для Automator:

source ~/.bash_profile

Это сделает путь и любые другие переменные среды, к которым вы привыкли, доступными из вашего скрипта automator.

Даниэль Шлауг
источник
Я предпочитаю это решение. Хороший обзор сценариев входа в bash находится здесь
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

Это охватывает все случаи, с которыми я столкнулся до сих пор.

silverdr
источник
1

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

Итак, в самом верху вашего скрипта Workflow Shell вы бы добавили:

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

monfresh
источник