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

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 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 a git en mi máquina (una 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/bin, que, 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 de Automator 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.

Respuestas (5)

Los scripts que se ejecutan a través de Automator usan 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 principio del guión.

De hecho, lo intenté poco después y tampoco funcionó.
Como se dijo en el otro comentario, este enfoque puede causar diferencias difíciles de depurar entre el comportamiento del script en Automator y en Terminal. Mejor uso source ~/.bash_profileo source ~/.bashrc.

Para una solución más general para el entorno bash en Automator que difiere del suyo, simplemente puede cargar su perfil bash personal en la primera línea del script bash de Automator:

source ~/.bash_profile

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

Prefiero mucho más esta solución. Una buena descripción general de los scripts de inicio de sesión de bash está aquí
Luchando para hacer que esto funcione para zsh, la fuente ~/.zprofile no ayudó
Tuve que usar la fuente ~/.zshrc
Creo que esto es mucho mejor que simplemente exportar $PATH, porque puede haber muchas más configuraciones en su perfil bash, por lo que el mismo script puede comportarse de manera diferente en Automator que en Terminal sin source ~/.bash_profileo source ~/.bashrc.
Esto en realidad no agregará /urs/local/bin a su ruta a menos que por alguna razón lo haya agregado a su ruta en .bash_profile. En macOS, /usr/local/bin generalmente se agrega a su ruta porque se incluye como una línea en /etc/paths.

Resolví el mismo problema de los mismos flujos de trabajo de "servicio" que se ejecutan en máquinas configuradas de manera diferente al verificar qué sucede cuando el terminal inicia el shell y, finalmente, agregué el siguiente fragmento en 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.

La única respuesta que me funciona en todos los casos. Gracias 🙇

No sé por qué ninguna de las otras respuestas me funcionó, pero si usa homebrew, coloque esto al comienzo del script de Automator.

export PATH=/opt/homebrew/bin:$PATH
Debido a que está utilizando una Mac M1 donde Homebrew se instala en /opt/homebrewlugar de /usr/local.

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

Entonces, en la parte superior de su secuencia de comandos de Workflow Shell, agregaría:

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