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

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.

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.


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.


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.


En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.