34 votos

Mi flujo de trabajo de Automator falla porque no encuentra el comando git dentro del comando 'Run Shell script'? Necesito ayuda

Tengo un flujo de trabajo de Automator y una de las acciones es clonar un repositorio. Aquí está el código de la acción 'Ejecutar Shell script'. El comando se ejecuta dentro del shell Bash /bin/bash si es que eso importa:

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 .

Ahora la aplicación Automator funciona bien en mi máquina. La ruta de acceso a git en mi máquina (Un Macbook Pro) es: /usr/bin/git (Creo que instalé git en mi máquina a través de Xcode)

Pero en la máquina de mi compañero de trabajo (también un Mac Pro) la aplicación Automator falla. De hecho, la salida del archivo log.txt dice: bash: git: command not found

Ahora en la máquina de mi compañero de trabajo la ruta de acceso a git es: usr/local/git/bin , que sí, es diferente porque él instaló git a través del instalador de Google Git para Mac OS X, pero no creí que debiera importar porque en el script el comando git no es la ruta absoluta al comando y además mi compañero de trabajo puede ejecutar git normalmente desde un Bash script pero cuando se invoca directamente desde la Terminal.

Entonces, ¿qué pasa? ¿Por qué el flujo de trabajo del automatizador funciona para mí pero no para mi compañero de trabajo?

Debe haber algo fundamental sobre Bash o Unix que no estoy entendiendo aquí pero estoy perdido.

59voto

Los scripts que se ejecutan a través de Automator utilizan la ruta de búsqueda por defecto que no suele incluir /usr/local/bin . En tu caso una solución fácil sería poner

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

en algún lugar al principio del script.

21voto

ℝaphink Puntos 1929

Para una solución más general al entorno bash en automator que difiere del suyo, podría simplemente cargar su perfil bash personal en la primera línea del bash de automator script:

source ~/.bash_profile

Esto hará que la ruta y cualquier otra variable de entorno que estés acostumbrado a usar esté disponible desde tu automotor script.

7voto

silverdr Puntos 21

Resolví el mismo problema de los mismos flujos de trabajo de "servicio" que se ejecutaban en máquinas configuradas de forma diferente, comprobando lo que ocurre cuando el terminal inicia el shell y, finalmente, añadiendo el siguiente fragmento al principio de todas mis acciones "Ejecutar 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

Esto cubre todos los casos que he encontrado hasta ahora.

2voto

disappearedng Puntos 163

Si quieres que el flujo de trabajo funcione en ambas máquinas que tienen git en diferentes ubicaciones, entonces añade cada ubicación a la variable PATH que mencionó patrix, separada por un : como se explica aquí: https://developer.apple.com/library/mac/documentation/AppleApplications/Conceptual/AutomatorConcepts/Articles/ShellScriptActions.html

Así, en la parte superior de su Workflow Shell script, añadiría:

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

AppleAyuda.com

AppleAyuda es una comunidad de usuarios de los productos de Apple en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X