Apple Script no puede encontrar ejecutables

Desde que me mudé zshde bashmis scripts AppleScript anteriores, ya no puedo encontrar los ejecutables que están en mi ruta, a menos que use la ruta completa a los ejecutables.

¿Qué puedo hacer para seguir usando zshy dejar de tener que ingresar la ruta completa al ejecutable en mis scripts de AppleScript?

Siento que me falta algo de configuración para zsho 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

el script de ejemplo no funcionaba:

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

trabajando con rutas completas a execs:

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

¿Tendría algo que ver con ejecutar estos scripts primero bash? shsabe 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 usa solo un nombre de comando en lugar de una ruta completa, el shell usa una lista de directorios (conocidos como su RUTA) para intentar encontrar la ruta completa al comando. Por razones de seguridad y portabilidad, do shell script ignora los archivos de configuración que leería un shell interactivo, por lo que no obtiene las personalizaciones que tendría en Terminal. Utilice la ruta completa del comando, por ejemplo, /sbin/ifconfig en lugar de solo ifconfig. Para encontrar la ruta completa en Terminal, diga qué nombre de comando, por ejemplo, qué ifconfig; para ver la lista de lugares en los que buscará el script de shell, diga "echo $PATH" del script de shell.

Todavía no entiendo por qué todos estos scripts funcionaron sin la ruta completa cuando bashera mi shell predeterminado y están todos rotos ahora que zshes mi predeterminado.

¡EDITAR_2 ESTO!

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

Cualquier aplicación iniciada desde el Finder obtiene el mismo entorno predeterminado: un directorio de trabajo de / y las variables de entorno INICIO, IDIOMA, RUTA, SHELL y USUARIO. La mayoría de las aplicaciones no cambian su entorno, pero confiar en esto es un riesgo de mantenimiento.

Porque, sin embargo, está invocando estos scripts no establece la ruta que cree que lo hace. ¿Cuál ES el camino mientras uno de estos se está ejecutando? ¿Dónde estableces tu camino y cómo estás invocando estos scripts?
Los pases predeterminados PATHal shell en un do shell script comando son: /usr/bin:/bin:/usr/sbin:/sbin-- Entonces, si el ejecutable no está dentro de eso, PATHdebe usar el nombre de ruta completamente calificado o deberá anteponer el (los) comando (s) con un export PATH=\"...\";lugar que ...representa el PATHque desea usar. P.ej:do shell script "export PATH=\"...\"; pbpaste | gsed 's/\\x2D/\\xE2\\x96\\xB8/g' | LANG=en_US.UTF-8 pbcopy"
Veo. Mirando Apple Technical Note TN2065 tiene algo de información. Lo invoco usando el Editor de secuencias de comandos en la barra de menú del Finder. Mis caminos están establecidos en ambos .bash_profiley .zprofile. Supongo que estoy confundido porque esto no fue un problema hasta que me mudé a zsh. ¿Los scripts de Apple Script almacenan rutas en metadatos cuando se crean?
RE: "¿Es necesario "rehacer" los scripts de Apple Script?" -- ¿Qué quieres decir, qué estás preguntando aquí?
@user3439894 el shell puede almacenar rutas a comandos usados ​​recientemente. Estaba reflexionando sobre eso. Me pregunto si, desde que ejecuté el script en bash y funcionó, es posible que haya modificado las rutas, pero eso no tiene sentido. Los caminos no han cambiado. Agregué más a la publicación.
Cada invocación de do shell scriptutiliza un nuevo proceso de shell, por lo que el estado, como los cambios en las variables y el directorio de trabajo, no se guardan de uno a otro.
@ user3439894 Agregué más información en la publicación original. Algo parece estar mal. do shell scriptusa shy shsabe dónde están los ejecutables. Como dije, estos scripts nunca requirieron la ruta completa para ejecutarse antes y algunos de los ejecutables estaban/no están en las rutas predeterminadas del sistema.
Ni una sola persona puede responder a la pregunta, pero están felices de anotarla. ¿Qué ha cambiado entre pasar de basha zshque haría que el mismo script no pudiera encontrar un ejecutivo? ¿No puede responder, pero está dispuesto a rebajarlo?
Cambiar su shell interactivo preferido no tiene nada que ver con eso. Sin duda, su secuencia de comandos de ejemplo encuentra pbpaste bien pero no encuentra gsed. Aparte... ¿hay alguna razón por la que necesite usar GNU sed?
El do shell script comando ejecuta un shell no interactivo sin inicio de sesión usando /bin/sh para interpretar su(s) comando(s). Si corres do shell script "set"verás con qué estás trabajando.
@MarcWilson respondí tus preguntas en el tercer comentario
@MarcWilson, solo estoy hablando del do shell script comando que se ejecuta desde el Editor de scripts o desde una acción Ejecutar AppleScript en Automator .
¿Qué hay en /etc/profiley ~/.profile? También puede ejecutar do shell script "env"para ver qué está configurado, SHELL debe apuntar a zsh. Puede configurar su ruta en ~/.profile y debería ser recogido.

Respuestas (1)

A menos que haya hecho algo muy creativo, el Editor de secuencias de comandos se utiliza shpara ejecutar secuencias de comandos de shell. No utiliza su shell configurado.

Eso apunta a una copia de bashpor defecto.

Cuando bashse invoca (como shell de inicio de sesión) como sh, solo lee /etc/profile y ~/.profile. Pero no lee archivos de inicio de lo contrario. Por lo tanto, no está leyendo ninguna configuración de shell que crea que está proporcionando.

Así que deberías simplemente heredar del sistema. ingrese la descripción de la imagen aquíTenga en cuenta que pbpastese puede encontrar ya que está en /usr/bin y la ruta predeterminada incluye /usr/bin.

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

¿Qué Shell usa realmente el script de Shell? do shell script siempre llama a /bin/sh. Sin embargo, en macOS, /bin/sh es realmente bash emulando sh.
Lo cual es irrelevante, cuando se invoca, ya que shno lee ningún archivo de inicio, simplemente hereda el entorno del sistema.
Bueno... Claramente funcionaron cuando los creé y los usé durante un año antes de mudarme a zsh. Claramente no funcionan ahora. Ese es el enigma y por qué publiqué. Seguiré trabajando en lo que cambió para causar esto.