1 votos

Obtenga el "do shell script" de AppleScript para utilizar el último Bash

Por alguna razón, no puedo conseguir que el "do shell script" de AppleScript utilice el último (GPLv3) Bash:

do shell script "/usr/local/bin/bash; echo $BASH_VERSION"
-- Result: "3.2.57(1)-release"

Extrañamente, es hace trabajar con un .sh externo script:

#!/usr/local/bin/bash
echo $BASH_VERSION

Llamándolo así:

do shell script "~/Library/Scripts/Script.sh"
-- Result: "5.0.17(1)-release"

¿Cuál es la diferencia y puedo hacer que funcione también dentro del .scpt script?

0 votos

El primero no emite el echo $BASH_VERSION en el subchasis que has creado. Mientras que los scripts tienen el she-bang que especifica exactamente en qué shell ejecutar el código.

0 votos

@Allan Todavía no estoy seguro de si mi problema puede ser resuelto entonces. ¿Puedo hacer que el subshell dentro de mi archivo .scpt utilice el último Bash?

0 votos

@abc Me sale algún error pero creo que no funciona.

1voto

books453 Puntos 1

do shell script siempre utiliza /bin/sh incluso si su shell por defecto, shebang, o $PATH se establece otra variable.

Para forzarlo a usar un shell diferente, tendrás que llamar a ese shell. Para ejecutar un comando en bash, utilice el argumento -c :

/usr/local/bin/bash -c 'echo $BASH_VERSION'

Si sólo desea ejecutar un único bash script, puede omitir la opción -c con: /usr/local/bin/bash /path/to/script.bash


En AppleScript:

do shell script "/usr/local/bin/bash -c 'echo $BASH_VERSION'"

La entrada de la página de manual de bash -c :

-c command_string

Si la opción -c está presente, los comandos se leen desde el primer argumento no opcional cadena_de_comandos.

0 votos

Es bueno correr do shell script "set" solo para ver lo que está disponible por defecto al desembolsar.

0 votos

Gracias, eso funciona. Mi confusión fue causada por el hecho de que veo cosas como do shell script "/bin/tcsh my-command-file-path" (de un documento de Apple), lo que me hizo pensar que funciona igual para los comandos directos. Para empezar, ¿no es redundante el especificador del shell si usas un shebang en el archivo externo script?

0 votos

Ignorará el shebang porque intentará ejecutar el script utilizando /bin/sh en lugar de tratar el script como un ejecutable. Si quieres ejecutar sólo un script (no un comando) puedes usar simplemente do shell script "/usr/local/bin/bash /full/path/to/script.bash"

0voto

Douglas Puntos 10417

En su shell scripts, debe utilizar #!/usr/bin/env bash .

¿Por qué?

Utilizará el bash que hayas especificado en tu $PATH porque el /bin/bash puede ser completamente diferente al bash en /usr/local/bin/bash que ha instalado después.

Para asegurarse de que "obtiene" la versión correcta de bash, asegúrese de que su directorio precede al original en su declaración de ruta. Por ejemplo, si se encuentra en /opt/local/bin Su camino puede ser algo parecido a esto:

/opt/local/bin:/opt/local/sbin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin

0 votos

Gracias, es útil saberlo. He cambiado mis scripts con esta línea. Efectivamente, tengo las rutas guardadas en /etc/paths con /usr/local/bin como primera línea.

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