Mon workflow Automator échoue car il ne trouve pas la commande git dans la commande 'Run Shell Script'? Besoin d'aide

20

J'ai un flux de travail Automator et l'une des actions consiste à cloner un référentiel. Voici le code de l'action «Exécuter le script shell». La commande est exécutée dans le shell Bash /bin/bashsi cela importe:

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 .

Maintenant, l'application Automator fonctionne correctement sur ma machine. Le chemin vers git sur ma machine (Un Macbook Pro) est: /usr/bin/git(Je crois que j'ai installé git sur ma machine via Xcode)

Mais sur la machine de mon collègue (également un Mac Pro), l'application Automator échoue. En fait, la sortie du fichier log.txt indique:bash: git: command not found

Maintenant, sur la machine de mon collègue, le chemin vers git est:, usr/local/git/bince qui, oui, est différent car il a installé git via Google Git Installer pour Mac OS X, mais je ne pensais pas que cela devrait avoir d'importance car dans le script, la commande git n'est pas un chemin absolu vers la commande et de plus mon collègue peut exécuter git normalement à partir d'un script Bash mais lorsqu'il est appelé directement depuis le terminal.

Alors qu'est-ce qui donne? Pourquoi le workflow de l'automatisme fonctionne-t-il pour moi mais pas pour mon collègue?

Il doit y avoir quelque chose de fondamental à propos de Bash ou Unix que je ne comprends pas ici mais je suis perdu.

racl101
la source

Réponses:

35

Les scripts exécutés via Automator utilisent le chemin de recherche par défaut qui ne comprend généralement pas /usr/local/bin. Dans votre cas, une solution simple serait de mettre

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

quelque part au début du script.

nohillside
la source
En fait, j'ai essayé peu de temps après et cela n'a pas fonctionné non plus.
racl101
12

Pour une solution plus générale à l'environnement bash dans un automate différent du vôtre, vous pouvez simplement charger votre profil bash personnel à la première ligne du script bash de l'automate:

source ~/.bash_profile

Cela rendra le chemin d'accès et toutes les autres variables d'environnement que vous avez l'habitude d'utiliser disponibles à partir de votre script d'automate.

Daniel Schlaug
la source
Je préfère de beaucoup cette solution. Un bon aperçu des scripts de connexion bash est ici
Jay
4

J'ai résolu le même problème des mêmes workflows de «service» exécutés sur des machines configurées différemment en vérifiant ce qui se passe lorsque le terminal démarre le shell et en ajoutant éventuellement l'extrait de code suivant en haut de toutes mes actions «Run Shell Script»:

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

Cela couvre tous les cas que j'ai rencontrés jusqu'à présent.

silverdr
la source
1

Si vous souhaitez que le workflow fonctionne sur les deux machines qui ont git dans des emplacements différents, ajoutez chaque emplacement à la variable PATH mentionnée par la matrice, séparé par un :, comme expliqué ici: https://developer.apple.com/library/mac /documentation/AppleApplications/Conceptual/AutomatorConcepts/Articles/ShellScriptActions.html

Donc, tout en haut de votre script shell de workflow, vous ajouteriez:

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

monfresh
la source