La variable de entorno $ PATH no parece ser reconocida

Realicé una nueva installation de Debian Wheezy e instalé zsh en ella. Pocos días después, hice una installation vainilla de TeX Live 2014, así que agregué las routes binarias necesarias a mi $ PATH. Ahora comencé a escribir pequeños guiones, por lo que me gustaría ponerlos en un lugar fácilmente accesible, es decir, ~/bin .

Mi path se ve así:

 ~/bin:/opt/texbin:/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games 

Ahora, si quería ejecutar algo de TeX Live, es fácil:

 % which pdflatex /opt/texbin/pdflatex 

No hay problema. Pero cuando bash ejecutar algo desde ~/bin , …

 % which hello_world hello_world not found 

Entonces comprobé dos veces:

 % ls -l ~/bin total 18 -rwxr-xr-x 1 bozbalci bozbalci 5382 Sep 8 00:28 hello_world 

Y muestra que hello_world está funcionando bien en ~/bin con sus permissions de ejecución establecidos. Intenté rehash , pero no funcionó. ¿Ayuda?

En un command de shell como

 PATH=~/bin:/opt/texbin:/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games 

la tilde se expande a su directory de inicio cuando se ejecuta el command de shell. Por lo tanto, el valor resultante de PATH es algo como /home/theconjuring/bin:/opt/texbin:/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games .

Asegúrese de que la tilde no esté dentro de las comillas ( PATH="~/bin:…" ), de lo contrario, representa por sí mismo. Para anteponer un directory al valor actual de PATH , puede usar

 PATH=~/bin:$PATH 

En general, en shells que no sean zsh, $PATH fuera de comillas dobles se rompe cuando el valor contiene espacios u otros caracteres especiales , pero en una tarea, es seguro. Con la export , sin embargo, debe escribir export PATH=~/bin:"$PATH" (aunque no necesita export con PATH porque ya está en el entorno). En zsh, no necesita comillas dobles, excepto cuando la variable puede estar vacía, pero si establece PATH en .profile , es procesada por /bin/sh o /bin/bash .

Sin embargo, si está configurando PATH en ~/.pam_environment , no puede usar ~ o $HOME para representar su directory principal. Este file no es analizado por un shell, es una list simple de NAME=value líneas de NAME=value . Entonces necesitas escribir los paths en su totalidad.