Discussion:
Path en Linux Mint
(demasiado antiguo para responder)
Ricardo Palomares Martínez
2013-03-24 18:52:58 UTC
Permalink
Saludos:

Posiblemente sea una FAQ, pero no he conseguido resolverlo buscando
en Internet. He migrado de Mageia a Linux Mint en busca de Mate y una
de las cosas que no he conseguido dejar funcionando a mi gusto es que
tengo, en mi $HOME, un directorio ~/scripts con varios scripts que
utilizo con mucha frecuencia. Sin embargo, no he sido capaz de
añadirlo al PATH del usuario.

He puesto un echo de depuración en /etc/profile para comprobar si se
ejecuta (echo "Leyendo /etc/profile"), y en ese mismo archivo he añadido:

source ${HOME}/.bash_profile

para ejecutar un archivo .bash_profile de cada usuario. En el de mi
usuario convencional tengo otro echo de depuración para comprobar si
se ejecuta y tengo al final líneas como éstas:

PATH=$PATH:$HOME/scripts
export PATH

Cuando abro una sesión de terminal con mi usuario no hay mensaje
alguno. Si ejecuto "bash" para lanzar otra sesión interna tampoco hay
mensaje. En cambio, si hago "sudo -i", veo estos dos mensajes:

Leyendo /etc/profile
-bash: /root/.bash_profile: No existe el archivo o el directorio

lo que hace pensar que el archivo /etc/profile sí se ejecuta y que su
orden source es correcta (sólo que en el caso de root no hay
.bash_profile). Sin embargo, no consigo ejecutar mis scripts sin tener
que anteponerles "scripts/<nombre_de_mi_script>".

¿Alguien podría ayudarme a averiguar qué hago mal?

Muchas gracias por adelantado.
--
Ricardo Palomares (RickieES)
http://www.mozilla-hispano.org/
http://www.proyectonave.es/
https://diasp.eu/u/rickiees
--
Ricardo Palomares (RickieES)
Diaspora: https://diasp.eu/u/rickiees
Skype: rickie0341971
Jabber: rpmdisguise-***@jabber.org



--- news://freenews.netfront.net/ - complaints: ***@netfront.net ---
Gonzalo Pérez de Olaguer Córdoba
2013-03-24 20:46:42 UTC
Permalink
Post by Ricardo Palomares Martínez
Posiblemente sea una FAQ, pero no he conseguido resolverlo buscando
en Internet. He migrado de Mageia a Linux Mint en busca de Mate y una
de las cosas que no he conseguido dejar funcionando a mi gusto es que
tengo, en mi $HOME, un directorio ~/scripts con varios scripts que
utilizo con mucha frecuencia. Sin embargo, no he sido capaz de
añadirlo al PATH del usuario.
He puesto un echo de depuración en /etc/profile para comprobar si se
source ${HOME}/.bash_profile
Esto no hace falta: bash ya lee ~/.bash_profile tras leer /etc/profile
Post by Ricardo Palomares Martínez
para ejecutar un archivo .bash_profile de cada usuario. En el de mi
usuario convencional tengo otro echo de depuración para comprobar si
PATH=$PATH:$HOME/scripts
export PATH
Esto funcionará sólo para login shells, lo cual quiere decir que para
verlo funcionar (tras hacer algún cambio) deberás hacer un nuevo
login: abrir una consola de texto con su login/password correspondiente,
reinicar la sesión X o ejecutar bash --login.
Post by Ricardo Palomares Martínez
Cuando abro una sesión de terminal con mi usuario no hay mensaje
alguno. Si ejecuto "bash" para lanzar otra sesión interna tampoco hay
Leyendo /etc/profile
-bash: /root/.bash_profile: No existe el archivo o el directorio
Creo que al abrir un nuevo terminal no se ejecuta ningún fichero de esos.
Post by Ricardo Palomares Martínez
lo que hace pensar que el archivo /etc/profile sí se ejecuta y que su
orden source es correcta (sólo que en el caso de root no hay
.bash_profile). Sin embargo, no consigo ejecutar mis scripts sin tener
que anteponerles "scripts/<nombre_de_mi_script>".
¿Alguien podría ayudarme a averiguar qué hago mal?
La manera como actúa bash en estos casos está documentada en la sección
INVOCATION del manual de bash (man bash). Más o menos va así:

1. login shell (lo que tienes al hacer sudo -i): se leen /etc/profile y
el primero que se encuentre de ~/.bash_profile, ~/.bash_login o ~/.profile

2. shell interactivo (cuando abres una consola o un emulador de terminal):
se leen /etc/bash.bashrc y ~/.bashrc

3. shell no interactivo (cuando se usa bash para ejecutar un script): no se
lee nada, a menos que se defina la variable de entorno BASH_ENV.

Todo esto puede variar según si hay o no argumentos; si están presentes las
opciones --login, -i, --noptrofile, --norc, --rcfile, --posix; si stdin y
stderr están conectadas a una tty, etc. Los detalles están en el manual.

Yo tengo esto en ~/.bash_profile:

# include .bashrc if it exists
if [ -f ~/.bashrc ]; then
. ~/.bashrc
fi

# set PATH so it includes user's private bin if it exists
if [ -d ~/bin ] ; then
PATH=~/bin:"${PATH}"
fi

Esto sólo se ejecutará para login shells, pero lo heredarán los
shells interactivos.

Recuerdo que tuve que hacer varias pruebas para comprender qué estaba
pasando, y todavía no lo tengo muy claro. Prueba mis sugerencias a ver
si te van bien.

Saludos,
Gonzalo.
--
Gonzalo Pérez de Olaguer Córdoba <***@iies.es> --- www.gpoc.es
PGP key 2861C704 --- F206 5671 6789 425D 111C 1302 214F 1934 2861 C704
Ricardo Palomares Martínez
2013-03-25 19:17:38 UTC
Permalink
Post by Gonzalo Pérez de Olaguer Córdoba
Post by Ricardo Palomares Martínez
He puesto un echo de depuración en /etc/profile para comprobar si se
source ${HOME}/.bash_profile
Esto no hace falta: bash ya lee ~/.bash_profile tras leer /etc/profile
Ya, eso decía la parte del man bash que leí, pero no me fijé en la de
INVOCATION, y como no parecía ejecutarse "solo", le puse la llamada. :-)
Post by Gonzalo Pérez de Olaguer Córdoba
Esto funcionará sólo para login shells, lo cual quiere decir que para
verlo funcionar (tras hacer algún cambio) deberás hacer un nuevo
login: abrir una consola de texto con su login/password correspondiente,
reinicar la sesión X o ejecutar bash --login.
Efectivamente, al probar con bash --login sí se leía el archivo.
Post by Gonzalo Pérez de Olaguer Córdoba
La manera como actúa bash en estos casos está documentada en la sección
1. login shell (lo que tienes al hacer sudo -i): se leen /etc/profile y
el primero que se encuentre de ~/.bash_profile, ~/.bash_login o ~/.profile
se leen /etc/bash.bashrc y ~/.bashrc
3. shell no interactivo (cuando se usa bash para ejecutar un script): no se
lee nada, a menos que se defina la variable de entorno BASH_ENV.
Todo esto puede variar según si hay o no argumentos; si están presentes las
opciones --login, -i, --noptrofile, --norc, --rcfile, --posix; si stdin y
stderr están conectadas a una tty, etc. Los detalles están en el manual.
# include .bashrc if it exists
if [ -f ~/.bashrc ]; then
. ~/.bashrc
fi
# set PATH so it includes user's private bin if it exists
if [ -d ~/bin ] ; then
PATH=~/bin:"${PATH}"
fi
Esto sólo se ejecutará para login shells, pero lo heredarán los
shells interactivos.
Es verdad, mi .bash_profile tenía incluido ya el if [ -f ~/.bashrc ].
Post by Gonzalo Pérez de Olaguer Córdoba
Recuerdo que tuve que hacer varias pruebas para comprender qué estaba
pasando, y todavía no lo tengo muy claro. Prueba mis sugerencias a ver
si te van bien.
Sí, efectivamente era eso. No se me pasó por la cabeza que hiciera
cosas diferentes al abrirse una terminal que al invocarlo con sudo -i
(que, al hacer un login, sigue el mismo camino que con bash --login).
Mejor dicho, lo que no se me pasó por la cabeza es que ejecutara
archivos diferentes.

Además, todo esto viene porque me traje la configuración del otro
sistema (Mageia, heredada a su vez de Mandriva), en los cuales sí que
era .bash_profile el que se ejecutaba (o, al menos, esa sensación
tenía yo) cuando abría una ventana normal de emulación de terminal.

He creado mi .bashrc con las órdenes que necesitaba (un par de
variables de entorno y el PATH) y he añadido echos de depuración en
todos los archivos. Ahora pasa lo siguiente:

- Al abrir una ventana de emulación de terminal se ejecutan
/etc/bash.bashrc y ~/.bashrc.

- Al hacer sudo -i se ejecutan /etc/profile y /etc/bash.bashrc (root
no tiene .bash_profile ni ~/.bashrc).

- Al hacer bash --login se ejecutan /etc/profile, /etc/bash.bashrc,
~/.bash_profile y ~/.bashrc.

Muchas gracias por la detallada respuesta.
--
Ricardo Palomares (RickieES)
Diaspora: https://diasp.eu/u/rickiees
Skype: rickie0341971
Jabber: rpmdisguise-***@jabber.org



--- news://freenews.netfront.net/ - complaints: ***@netfront.net ---
Continúe leyendo en narkive:
Loading...