36 votes

Mon flux de travail Automator échoue parce qu'il ne trouve pas la commande git dans la commande 'Run Shell script' ? Besoin d'aide

J'ai un flux de travail Automator et l'une des actions consiste à cloner un référentiel. Voici le code de l'action 'Run Shell script'. La commande est exécutée dans le shell Bash /bin/bash si cela compte :

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 bien sur mon ordinateur. Le chemin d'accès à git sur ma machine (un Macbook Pro) est le suivant : /usr/bin/git (Je crois avoir 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 dit : bash: git: command not found

Maintenant, sur la machine de mon collègue, le chemin vers git est le suivant : usr/local/git/bin qui, oui, est différent parce qu'il a installé git par le biais du Google Git Installer pour Mac OS X, mais je ne pensais pas que cela devait avoir de l'importance parce que dans le script la commande git n'est pas le 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 invoqué directement à partir du Terminal.

Alors, que se passe-t-il ? Pourquoi le flux de travail de l'automate fonctionne-t-il pour moi mais pas pour mon collègue ?

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

60voto

nohillside Points 82672

Les scripts exécutés via Automator utilisent le chemin de recherche par défaut qui n'inclut 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.

0 votes

J'ai en fait essayé peu de temps après et ça n'a pas marché non plus.

0 votes

Comme dit dans l'autre commentaire, cette approche peut causer des différences difficiles à déboguer entre le comportement de script dans Automator vs. dans Terminal. Mieux vaut utiliser source ~/.bash_profile o source ~/.bashrc .

21voto

Jaime Points 141

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

source ~/.bash_profile

Cela rendra le chemin et toutes les autres variables d'environnement que vous avez l'habitude d'utiliser disponibles depuis votre script d'automate.

0 votes

Je préfère de loin cette solution. Un bon aperçu du login bash scripts est ici

0 votes

J'ai du mal à faire fonctionner ceci pour zsh, la source ~/.zprofile n'a pas aidé.

1 votes

J'ai dû utiliser la source ~/.zshrc

7voto

silverdr Points 249

J'ai résolu le même problème de flux de travail "service" identiques 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 finalement le snippet suivant en haut de toutes mes actions "Exécuter 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.

0 votes

La seule réponse qui fonctionne pour moi dans tous les cas. Je vous remercie

2voto

monfresh Points 321

Si vous voulez que le flux de travail fonctionne sur les deux machines qui ont git à des emplacements différents, ajoutez chaque emplacement à la variable PATH que patrix a mentionnée, en les séparant par un signe : comme expliqué ici : https://developer.apple.com/library/mac/documentation/AppleApplications/Conceptual/AutomatorConcepts/Articles/ShellScriptActions.html

Ainsi, tout en haut de votre Workflow Shell script, vous ajouteriez :

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

LesApples.com

LesApples est une communauté de Apple où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres utilisateurs d'appareils Apple, poser vos propres questions ou résoudre celles des autres.

Powered by:

X