¿Mi flujo de trabajo de Automator falla porque no puede encontrar el comando git dentro del comando 'Ejecutar script de Shell'? Necesitas ayuda

20

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

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 .

Ahora la aplicación Automator funciona bien en mi máquina. La ruta a git en mi máquina (A 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 una 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 a git es: usr/local/git/binque sí es diferente porque instaló git a través del instalador de Google Git para Mac OS X, pero no pensé que debería importar porque en el script el comando git no es una ruta absoluta al comando y, además, mi compañero de trabajo puede ejecutar git normalmente desde un script Bash pero cuando se invoca directamente desde la Terminal.

Entonces, ¿qué da? ¿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 entiendo aquí pero estoy perdido.

racl101
fuente

Respuestas:

35

Las secuencias de comandos que se ejecutan a través de Automator utilizan la ruta de búsqueda predeterminada que generalmente no incluye /usr/local/bin. En su caso, una solución fácil sería poner

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

en algún lugar al comienzo del guión.

nohillside
fuente
En realidad lo intenté poco después y tampoco funcionó.
racl101
12

Para obtener una solución más general al entorno bash en el automatizador diferente al suyo, simplemente puede cargar su perfil de bash personal en la primera línea del script de automatización del bash:

source ~/.bash_profile

Esto hará que la ruta y cualquier otra variable de entorno que esté acostumbrado a usar esté disponible desde su script de automatización.

Daniel Schlaug
fuente
Prefiero esta solución. Una buena descripción de los scripts de inicio de sesión de bash está aquí
Jay
4

Resolví el mismo problema de los mismos flujos de trabajo de "servicio" que se ejecutan en máquinas configuradas de manera diferente verificando qué sucede cuando el terminal inicia el shell y eventualmente agregué el siguiente fragmento a la parte superior de todas mis acciones de "Ejecutar script de 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

Esto cubre todos los casos que he encontrado hasta ahora.

silverdr
fuente