GNU/Linux >> Tutoriales Linux >  >> Linux

¿Comando no encontrado en Zsh, pero encontrado en Bash?

estoy usando zsh en ubuntu y creé un enlace simbólico para bat así:

ln -s /usr/bin/batcat /home/user_name/.local/bin/bat

pulsando ls -l de ~/.local/bin muestra:

lrwxrwxrwx 1 tux tux 15 May 19 13:47 bat -> /usr/bin/batcat

Ahora desde cualquier directorio (incluso en ~/.local/bin ),

Si ejecuto bat , obtengo command not found: bat . También ejecutando ~/.local/bin no funciona Sin embargo, ejecutar ./bat (de ~/.local/bin ) funciona. Ejecutando batcat también funciona.

echo $PATH muestra que ~/.local/bin está en el camino

¿Qué podría estar yendo mal aquí? ningún enlace simbólico funciona, bat es solo un ejemplo

PD En bash, las cosas funcionan como se esperaba

Respuesta aceptada:

Si su PATH en realidad contiene ~/.local/bin con el carácter de tilde literal:eso no funcionará. La tilde debe expandirse a su directorio de inicio.

Por ejemplo, cualquiera de estas líneas es correcta en zsh, bash o cualquier otro shell similar a sh:

PATH=~/.local/bin:$PATH
PATH=$PATH:~/.local/bin
PATH=~/.local/bin:"$PATH"
PATH="$PATH":~/.local/bin
export PATH="$HOME/.local/bin:$PATH"
export PATH="$PATH:$HOME/.local/bin"

Funcionan porque ~ se expande al directorio de inicio cuando está al comienzo de una palabra, inmediatamente después del signo igual en una tarea, o inmediatamente después de un : en el lado derecho de una asignación (el propósito de esta última regla es precisamente la conveniencia de configurar PATH ).

Pero una línea como PATH="~/.local/bin:$PATH" no funcionará, porque ~ no se expande entre comillas dobles, por lo que el valor de PATH termina conteniendo el carácter literal ~ . Esta PATH hace referencia a un directorio llamado ~ en el directorio actual, no en su directorio de inicio.

Bash¹ tiene una función en la que ~ se interpreta como el directorio de inicio al comienzo de las entradas de ruta. Entonces PATH="~/.local/bin:$PATH" funciona parcialmente en bash. Sin embargo, solo funciona cuando ejecuta un programa desde bash directamente, no cuando otros programas que no sean bash inician programas. Entonces, incluso si usa bash, no ponga un ~ literal en la ruta, asegúrese de que esté expandida o use $HOME en su lugar.


Linux
  1. [Solucionado] bash:sudo:comando no encontrado

  2. Comando no encontrado en Bash arreglado

  3. Sudo:Nocorrect:¿Comando no encontrado?

  4. ifrename:comando no encontrado

  5. rm:comando no encontrado

Solución de problemas del error "Bash:Comando no encontrado" en Linux

bash:netstat:comando no encontrado.

nc:comando no encontrado

aws-shell:comando no encontrado

df:comando no encontrado

du:comando no encontrado