¿Por qué .profile (y no .bashrc) agrega ~ / bin a la ruta?

9

Dado que .bashrces más "genérico" (en el sentido que lo .profileorigina), ¿por qué el ~/binprocedimiento "incluir en la ruta" no está dentro .bashrc? ¿Por qué el usuario no lo querría en un shell sin inicio de sesión? (Especialmente hoy en día, donde los shells sin inicio de sesión son más comunes *).

Sé que puedo hacer manualmente ese cambio, pero quiero saber si hay una razón.

* No puedo probarlo, pero creo que ese es el caso.

borges
fuente

Respuestas:

13

~/.bashrcy /etc/bash.bashrcse ejecutan cada vez que bashse inicia un shell interactivo .

Por el contrario, ~/.profiley /etc/profilese ejecute cada vez que un inicio de sesión se inicia la cáscara. Por lo tanto, no tiene que ser un bashshell, pero sí tiene que ser un shell de inicio de sesión (y muchas bashinstancias de shell no son shells de inicio de sesión ).

  • Un bashshell es un shell donde está el programa de shell que lo proporciona bash, en lugar de algún otro programa, como dash.
  • Un shell de inicio de sesión es un shell que se inicia automáticamente como consecuencia del inicio de sesión, para proporcionar la interfaz de usuario (gráfica o línea de comandos) para el inicio de sesión. Cuando se sale de un shell de inicio de sesión, el inicio de sesión finaliza.

Por lo tanto, colocar una recomendación que anexe entradas PATHen un bashrcarchivo:

  1. No haga nada cuando el caparazón no bashlo sea, lo cual suele ser el caso. Por ejemplo, PATHno se modificaría cuando esté en una sesión de inicio de sesión gráfica. Recuerde, PATHno solo lo usan los programas de línea de comandos.

  2. Añádalo una y otra vez en presencia de bashconchas anidadas . Entonces, si inicia un shell dentro de un shell, que es muy común, por una variedad de razones, entonces tendrá varias ~/binentradas apiladas en su PATH. Esto hace que la PATHvariable de entorno sea difícil de leer y, a veces, también disminuye el rendimiento.

Estos serían indeseables. Por lo tanto, sería un error poner esto en un bashrcarchivo; en realidad pertenece ~/.profile. ~/.profilees el lugar adecuado para:

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

Los shells sin inicio de sesión tienen shells de inicio de sesión (o algo que se comporta como un shell de inicio de sesión) como su padre, y heredan la mayoría de sus variables de entorno, incluido PATH, desde este shell de inicio de sesión. Por lo tanto, colocar comandos de modificación de ruta ~/.profilerequiere que cierre la sesión y vuelva a iniciarla para que sean efectivos, pero también afecta el entorno de los shells sin inicio de sesión (así como el entorno de los programas que no son shells, ya que cada programa obtiene su propio conjunto de variables de entorno, denominado "entorno", heredado de su proceso padre).

Eliah Kagan
fuente
Entiendo. Pero esta decisión todavía no tiene sentido para mí. Si abro una terminal en este momento solo carga .bashrc, entonces no podré ver mi contenedor privado.
borges
@borges Si la configuración predeterminada no funciona bien para usted, no dude en cambiarla. (Es su computadora, después de todo. O al menos su cuenta.) Pero esto suena como una cosa de una sola vez. Es decir, parece que su bindirectorio privado no existía cuando inició sesión y que lo creó durante esta sesión de inicio de sesión. Si cierra sesión y vuelve a iniciarla, estará en su PATH. Dado que crear su bindirectorio privado es algo que solo debe hacerse una vez, este es un inconveniente único.
Eliah Kagan
3

Es porque tradicionalmente las variables de entorno van solo en /etc/profileo .profile. El bashrcarchivo es para cosas como alias, configuraciones de solicitud, opciones de shell, etc. (es decir, cosas que se relacionan directamente con el shell).

teppic
fuente