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/bash
si 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.
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.
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.
source ~/.bash_profile
o source ~/.bashrc
.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.
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
/opt/homebrew
lugar 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
racl101
Martín Hepp
source ~/.bash_profile
osource ~/.bashrc
.