¿Cuáles son las diferencias funcionales entre .profile .bash_profile y .bashrc

182

¿Cuáles son las diferencias funcionales entre el .profile, .bash_profiley .bashrcarchivos?

montaña rusa
fuente

Respuestas:

151

.bash_profiley .bashrcson específicos de bash, mientras que .profilemuchos shells leen en ausencia de sus propios archivos de configuración específicos de shell. ( .profilefue utilizado por el shell Bourne original) .bash_profileo .profilese lee mediante shells de inicio de sesión, junto con .bashrc; subcapas de solo lectura .bashrc. (Entre el control del trabajo y los sistemas modernos de ventanas, .bashrcpor sí solo no se usa mucho. Si usa screeno tmux, las pantallas / ventanas generalmente ejecutan subshells en lugar de shells de inicio de sesión).

La idea detrás de esto era que la configuración de una sola vez se realizaba por .profile(o la versión específica del shell del mismo), y las cosas por shell por .bashrc. Por ejemplo, por lo general, solo desea cargar variables de entorno una vez por sesión en lugar de eliminarlas cada vez que inicia una subshell dentro de una sesión, mientras que siempre desea sus alias (que no se propagan automáticamente como lo hacen las variables de entorno).

Otros archivos de configuración de shell notables:

/etc/bash_profile(respaldo /etc/profile) se lee antes del usuario .profilepara la configuración de todo el sistema, y ​​también /etc/bashrcen subcapas (no hay respaldo para este). Muchos sistemas, incluido Ubuntu, también usan un /etc/profile.ddirectorio que contiene scriptlets de shell, que son .( source) editados desde /etc/profile; los fragmentos aquí son por shell, y se *.shaplican a todos los shells compatibles con Bourne / POSIX y otras extensiones que se aplican a ese shell en particular.

geekosaur
fuente
58

.perfil

.profilees para cosas que no están específicamente relacionadas Bash, como variables de entorno PATHy amigos, y deberían estar disponibles en cualquier momento.

Por ejemplo, .profiletambién debe cargarse al iniciar una sesión de escritorio gráfica.


.bashrc

.bashrces para configurar el uso interactivo de Bash, como Bash aliasesconfigurar su favorito editor, configurar el Bash prompt, etc.


.bash_profile

.bash_profile es para asegurarse de que se carguen tanto los elementos .profilecomo los contenidos ..bashrclogin shells

Por ejemplo, .bash_profilepodría ser algo simple como

. ~/.profile
. ~/.bashrc

Si tuviera que omitir .bashrc, solo .profilese cargaría.

MangeshBiradar
fuente
1
Esto respondió mi pregunta para Mac OS X
Jake Toronto
38

Según la página de manual de bash, .bash_profilese ejecuta para shells de inicio de sesión, mientras que .bashrcse ejecuta para shells interactivos sin inicio de sesión.

Entonces, ¿qué es un shell de inicio o no inicio de sesión?

Cuando inicia sesión (escriba nombre de usuario y contraseña) a través de la consola, ya sea sentado en la máquina o de forma remota a través de ssh: .bash_profilese ejecuta para configurar su shell antes del símbolo del sistema inicial. Pero, si ya ha iniciado sesión en su máquina y abre una nueva ventana de terminal (xterm) dentro de Gnome o KDE, entonces .bashrcse ejecuta antes del símbolo del sistema de la ventana. .bashrctambién se ejecuta cuando inicia una nueva instancia de bash escribiendo /bin/bashuna terminal.

Una excepción a las pautas de la ventana de terminal es Terminal.app de Mac OS X, que ejecuta un shell de inicio de sesión de forma predeterminada para cada nueva ventana de terminal, llamando en .bash_profilelugar de .bashrc. Otros emuladores de terminal GUI pueden hacer lo mismo, pero la mayoría tienden a no hacerlo.

Más aquí .

Paulecci
fuente