Il mio flusso di lavoro di Automator non riesce perché non riesce a trovare il comando git nel comando "Esegui script shell"? Ho bisogno di aiuto


20

Ho un flusso di lavoro di Automator e una delle azioni è clonare un repository. Ecco il codice per l'azione "Esegui script shell". Il comando viene eseguito all'interno della shell Bash /bin/bashse è importante:

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 .

Ora l'app Automator funziona perfettamente sulla mia macchina. Il percorso per git sul mio computer (A Macbook Pro) è: /usr/bin/git(credo di aver installato git sul mio computer tramite Xcode)

Ma sulla macchina del mio collega (anche un Mac Pro) l'app Automator fallisce. In effetti, l'output del file log.txt dice:bash: git: command not found

Ora sulla macchina del mio collega il percorso per git è: usr/local/git/binche, sì, è diverso perché ha installato git tramite Google Git Installer per Mac OS X, ma non pensavo che dovesse importare perché nello script il comando git non è il percorso assoluto del comando e inoltre il mio collega può eseguire git normalmente da uno script Bash ma quando viene invocato direttamente dal Terminale.

Quindi cosa dà? Perché il flusso di lavoro dell'automatore funziona per me ma non per il mio collega?

Ci deve essere qualcosa di fondamentale in Bash o Unix che non capisco qui ma mi sono perso.

Risposte:


35

Gli script eseguiti tramite Automator utilizzano il percorso di ricerca predefinito che di solito non include /usr/local/bin. Nel tuo caso sarebbe una soluzione facile da mettere

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

da qualche parte all'inizio della sceneggiatura.


In realtà ho provato poco dopo e non ha funzionato neanche.
racl101,

12

Per una soluzione più generale all'ambiente bash nell'automatore, diversa dalla tua, puoi semplicemente caricare il tuo profilo bash personale nella prima riga dello script bash dell'automatore:

source ~/.bash_profile

Ciò renderà disponibile il percorso e tutte le altre variabili d'ambiente a cui sei abituato a utilizzare dallo script dell'automatore.


Preferisco di gran lunga questa soluzione. Una buona panoramica degli script di login di bash è qui
Jay,

4

Ho risolto lo stesso problema degli stessi flussi di lavoro "di servizio" eseguiti su macchine configurate in modo diverso controllando cosa succede quando il terminale avvia la shell e aggiungendo infine il frammento seguente all'inizio di tutte le mie azioni "Esegui script 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

Questo copre tutti i casi che ho riscontrato finora.


Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.