Meu fluxo de trabalho do Automator falha porque não encontra o comando git no comando 'Executar script do shell'? Preciso de ajuda

20

Eu tenho um fluxo de trabalho do Automator e uma das ações é clonar um repositório. Aqui está o código para a ação 'Executar script do shell'. O comando é executado no shell Bash /bin/bashse isso importa:

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 .

Agora, o aplicativo Automator funciona bem na minha máquina. O caminho para o git na minha máquina (A Macbook Pro) é: /usr/bin/git(acredito que instalei o git na minha máquina através do Xcode)

Mas na máquina do meu colega de trabalho (também um Mac Pro), o Automator App falha. De fato, a saída do arquivo log.txt diz:bash: git: command not found

Agora, na máquina do meu colega de trabalho, o caminho para o git é:, usr/local/git/binque, sim, é diferente porque ele instalou o git por meio do Google Git Installer para Mac OS X, mas não achei que fosse importante, porque no script o comando git não é um caminho absoluto para o comando e ainda mais, meu colega de trabalho pode executar o git normalmente a partir de um script Bash, mas quando invocado diretamente no Terminal.

Então, o que dá? Por que o fluxo de trabalho do automator funciona para mim, mas não para meu colega de trabalho?

Deve haver algo fundamental sobre o Bash ou o Unix que não estou entendendo aqui, mas estou perdido.

racl101
fonte

Respostas:

35

Os scripts executados via Automator usam o caminho de pesquisa padrão que geralmente não inclui /usr/local/bin. No seu caso, uma solução fácil seria colocar

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

em algum lugar no início do script.

nohillside
fonte
Na verdade, tentei logo depois e também não funcionou.
racl101
12

Para uma solução mais geral para o ambiente bash no automator diferente da sua, você pode simplesmente carregar seu perfil pessoal na primeira linha do script bash do automator:

source ~/.bash_profile

Isso tornará o caminho e quaisquer outras variáveis ​​de ambiente que você está acostumado a usar disponíveis no seu script de automação.

Daniel Schlaug
fonte
Eu prefiro muito esta solução. Uma boa visão geral dos scripts de login Bash é aqui
Jay
4

Resolvi o mesmo problema dos mesmos fluxos de trabalho de "serviço" sendo executados em máquinas configuradas de forma diferente, verificando o que acontece quando o terminal inicia o shell e, eventualmente, adicionando o seguinte trecho à parte superior de todas as minhas ações "Executar script de shell":

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

Isso abrange todos os casos que encontrei até agora.

silverdr
fonte
1

Se você deseja que o fluxo de trabalho funcione em ambas as máquinas que possuem git em locais diferentes, adicione cada local à variável PATH que patrix mencionada, separada por a :, conforme explicado aqui: https://developer.apple.com/library/mac /documentation/AppleApplications/Conceptual/AutomatorConcepts/Articles/ShellScriptActions.html

Portanto, no topo do seu Script do Shell de Fluxo de Trabalho, você adicionaria:

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

monfresh
fonte