3 votos

zsh no encuentra script en el PATH mientras que bash sí (echo $PATH es el mismo)

Estoy tratando de ejecutar un script usando sólo su nombre. Así que, naturalmente, lo he añadido a la PATH variable. Pero parece que a zsh no le importa. Si cambio a bash todo funciona bien. Los siguientes fragmentos de terminal sucedieron secuencialmente sin nada entre ellos. Sólo los separé para facilitar la lectura. No hice nada raro en el medio.

El script

felix@stochastik3 ~ % cat bin/pluto
#!/usr/bin/env sh
julia --eval "import Pkg; Pkg.add(\"Pluto\"); Pkg.update(\"Pluto\"); import Pluto; Pluto.run()"

ZSH no encuentra el script

felix@stochastik3 ~ % pluto
zsh: command not found: pluto

Bash hace

felix@stochastik3 ~ % bash

The default interactive shell is now zsh.
To update your account to use zsh, please run `chsh -s /bin/zsh`.
For more details, please visit https://support.apple.com/kb/HT208050.
bash-3.2$ pluto
    Updating registry at `~/.julia/registries/General.toml`
   Resolving package versions...
  No Changes to `~/.julia/environments/v1.7/Project.toml`
^CERROR: InterruptException:

El camino es el mismo

bash-3.2$ echo $PATH
/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/Library/TeX/texbin:/Applications/Visual Studio Code.app/Contents/Resources/app/bin:~/bin/:
bash-3.2$ exit
exit
felix@stochastik3 ~ % echo $PATH
/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/Library/TeX/texbin:/Applications/Visual Studio Code.app/Contents/Resources/app/bin:~/bin/:
felix@stochastik3 ~ % pluto
zsh: command not found: pluto

Inicialmente el PATH terminó con :~/bin Entonces intenté :~/bin/: . Así que ese no debería ser el problema.

7voto

Nate Puntos 220

No utilice ~ en su PATH . Es una abreviatura del shell para su directorio personal, pero no funcionará en muchos otros casos. Los casos en los que funciona correctamente son aquellos en los que el intérprete de comandos lo expande a la ruta completa de tu directorio personal antes de utilizarlo. Además, no pongas un / al final de un PATH entrada.

Así que esto está bien, porque la cáscara se expandirá antes de que se añade a PATH :

PATH="$PATH":~/bin

La cáscara ampliará el ~ a algo como /Users/stochastik3 y que se añadirá a la PATH variable. Pero si usas esto:

PATH="$PATH:~/bin"    # Don't do this

El ~ está dentro de comillas dobles, por lo que no se expandirá correctamente.

Ahora, la razón por la que funciona en bash es que bash hace su propio PATH interpretación, y se hace ampliar ~ cuando lo encuentra en PATH . Pero nada más lo hace . zsh no lo hace, ksh no lo hace, y probablemente más importante, el sistema operativo no lo hace, por lo que un PATH entrada con ~ no será reconocido en un find ... -exec o sudo o env o... cualquier otra cosa que no sea directamente en bash.

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