0 votos

Apple scriptno encuentra los ejecutables

Desde que se trasladó a zsh de bash mi anterior AppleScript scripts ya no puede encontrar los ejecutables que están en mi ruta, a menos que utilice la ruta completa de los ejecutables.

¿Qué puedo hacer para seguir utilizando zsh y dejar de tener que introducir la ruta completa del ejecutable en mi AppleScript scripts?

Siento que me falta alguna configuración para zsh o para AppleScript.

11/05/21_14:20:53 /Users/john
$ mypath
/Users/john/.pyenv/shims
/usr/local/sbin
/usr/local/bin
/usr/bin
/bin
/usr/sbin
/sbin
/opt/X11/bin
/Library/Apple/usr/bin

ejemplo script no funcionaba:

do shell script "pbpaste | gsed 's/\\x2D/\\xE2\\x96\\xB8/g' | LANG=en_US.UTF-8 pbcopy"

trabajando con rutas completas para los ejecutivos:

do shell script "/usr/bin/pbpaste | /usr/local/bin/gsed 's/\\x2D/\\xE2\\x96\\xB8/g' | LANG=en_US.UTF-8 pbcopy"

¿Tendrá algo que ver con la ejecución de estos scripts bajo bash primero. sh sabe dónde están los ejecutables.

sh-3.2$ which gsed
/usr/local/bin/gsed
sh-3.2$ which pbpaste
/usr/bin/pbpaste
sh-3.2$ 

EDIT_1: De la nota técnica de Apple TN2065

En segundo lugar, cuando se utiliza sólo un nombre de comando en lugar de una ruta completa, el shell utiliza una lista de directorios (conocida como su PATH) para tratar de encontrar la ruta completa del comando. Por razones de seguridad y portabilidad seguridad y portabilidad, do shell script ignora los archivos de configuración que un shell interactivo leería, por lo que no se obtienen las personalizaciones que en la Terminal. Utilice la ruta completa del comando, por ejemplo /sbin/ifconfig en lugar de sólo ifconfig. Para encontrar la ruta completa en Terminal, diga qué nombre de comando, por ejemplo, qué ifconfig; para ver la lista de lugares donde do shell script buscará, diga do shell script "echo $PATH".

Todavía no entiendo por qué todos estos scripts funcionaban sin la ruta completa cuando bash era mi shell por defecto y están todos rotos ahora que zsh es mi opción por defecto.

EDIT_2 ¡ESTO!

De dónde viene el entorno del shell - variables de entorno, ¿directorio de trabajo, etc.? do shell script hereda el entorno de su proceso padre, que es siempre el proceso que ejecuta el script. El entorno cubre el directorio de trabajo, cualquier variable de entorno y otros atributos - vea execve(2) para una lista completa. lista completa. Como se mencionó en Emisión de comandos, do shell script no lee los archivos de configuración que un shell interactivo ejecutado en Terminal lo haría.

Cualquier aplicación lanzada desde el Finder obtiene el mismo entorno por defecto por defecto: un directorio de trabajo de / y las variables de entorno HOME, LANG, PATH, SHELL y USER. La mayoría de las aplicaciones no cambian su entorno, pero confiar en esto es un riesgo de mantenimiento.

0 votos

Porque sea como sea que estés invocando estos scripts no establece la ruta que tú crees. ¿Cuál es la ruta mientras se ejecuta uno de estos? ¿Dónde se establece la ruta y cómo se invoca a estos scripts?

0 votos

El valor por defecto PATH pasa a la shell en un do shell script comando es: /usr/bin:/bin:/usr/sbin:/sbin -- Así que si el ejecutable no está dentro de ese PATH es necesario utilizar el nombre de ruta completamente calificado o necesitará anteponer el comando(s) con un export PATH=\"...\"; donde ... representa el PATH quieres usar . Por ejemplo do shell script "export PATH=\"...\"; pbpaste | gsed 's/\\x2D/\\xE2\\x96\\xB8/g' | LANG=en_US.UTF-8 pbcopy"

0 votos

Ya veo. Mirando la nota técnica de Apple TN2065 hay algo de información. Lo estoy invocando usando script Editor en la barra de menú del Finder. Mis rutas se establecen en ambos .bash_profile y .zprofile . Supongo que estoy confundido porque esto no era un problema hasta que me mudé a zsh . ¿Los script script de Apple almacenan las rutas en los metadatos cuando se crean?

1voto

Marc Wilson Puntos 146

A no ser que hayas hecho algo muy creativo, el editor de script está utilizando sh para ejecutar shell scripts. No utiliza su shell configurado.

Eso apunta a una copia de bash por defecto.

Cuando bash se invoca (como un shell de inicio de sesión) como sh Sólo lee /etc/profile y ~/.profile. Pero no lee ningún otro archivo de inicio. Así que no está leyendo ninguna configuración del shell que usted cree que está proporcionando.

Por lo tanto, sólo deberías heredar del sistema. enter image description here Tenga en cuenta que pbpaste se puede encontrar ya que está en /usr/bin y la ruta por defecto incluye /usr/bin.

Como eso no funciona, se ha cambiado algo más.

0 votos

¿Qué shell utiliza do shell script, realmente? do shell script siempre llama a /bin/sh. Sin embargo, en MacOS, /bin/sh es realmente bash emulando a sh.

0 votos

1 votos

Lo cual es irrelevante, cuando se invoca como sh no lee ningún archivo de inicio, simplemente hereda el entorno del sistema.

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