Bash no carga '.profile' en una nueva sesión en Linux

19

Estoy configurando una nueva máquina Linux que obtuve de nuestro departamento de TI, y noté .profileque no se carga cuando comienzo una nueva sesión de terminal. El shell actual es Bash , aunque he cambiado desde el valor predeterminado sh que vino. ¿Cómo hago que se cargue .profileal inicio?

Accedo a la cáscara a través de SSH : ssh myusername@remotemachine. Tengo privilegios de administrador en ello.

sa125
fuente
Muéstranos tu comando que usas para iniciar tu shell.
Nifle

Respuestas:

22

Cuando Bash se inicia como un shell de inicio de sesión interactivo, uno de los archivos que puede procesar es ~/.profile.

Cuando comienza como un shell interactivo sin inicio de sesión, no lo hace. Se procesa /etc/bash.bashrc(si ese archivo o un archivo similar está habilitado en su versión de Bash) y ~/.bashrc.

Puede agregar lo siguiente a su ~/.bashrc(pero tenga cuidado con los bucles o valores que se cambian sin darse cuenta):

. $HOME/.profile
Dennis Williamson
fuente
8
Si vas a tener tu fuente .bashrc como tu .profile (que no recomiendo) deberías tener algo de protección contra el doble abastecimiento. Establecer alguna variable de guardia más o menos [ -z "$SOME_VAR_SET_IN_PROFILE" ] && . ~/.profile
Rich Homolka
2
Sí, tampoco lo recomiendo realmente.
Dennis Williamson
12
Un shell de inicio de sesión intentará ~ / .bash_profile, ~ / .bash_login y ~ / .profile en orden y solo abrirá el primero que encuentre.
Beano
3
Como han dicho otros, esto NO se recomienda, ya que la forma habitual es que el perfil y los "amigos" (.bash_profile) obtengan .bashrc, y no al revés. Podría ser que su programa de terminal NO sea un shell de inicio de sesión, sino un shell interactivo sin inicio de sesión. A menudo hay una preferencia que puede establecer: conviértalo en un shell de inicio de sesión para ejecutar .profile, .login y / o .bash_profile para ejecutar.
rholmes
15

Depende de cómo comiences tu shell. Como otros han dicho, un shell de inicio de sesión cargará su perfil (primero buscará .bash_profile, luego intentará .profile). Si encuentra uno de estos, los carga. Un shell sin inicio de sesión (ya sea interactivo o no interactivo) generará .bashrc.

Sugeriría poner todo en .bashrc. La división .profile / .bashrc era algo arbitraria y tenía más sentido en los viejos tiempos de UNIX cuando tty no era solo un nombre de dispositivo y significaba un TeleType real. Estaba destinado a comenzar ciertas cosas (como verificar el correo) en el inicio de sesión 'principal' a un servidor, y solo cosas de configuración normal para otros shells. En la mayoría de Linux, iniciará sesión ahora, en realidad no está iniciando sesión en un shell, ya que está iniciando sesión en alguna interfaz gráfica (KDE, gnome, CDE 'shudder'). El administrador de la sesión ahora se encarga de los "procesos de inicio de sesión". Es mucho menos relevante ahora.

Mi sugerencia: haga que su .profile consista únicamente en:

[ -f $HOME/.bashrc ] && . $HOME/.bashrc

como la primera línea de .bashrc, evite que sucedan cosas extrañas al ejecutar un script bash saltando temprano:

[[ $- != *i* ]] && return
Rich Homolka
fuente
55
.profiledebe mantenerse bajo agnóstico. Sugiero configurar .bash_profilepara cargar .profiley luego cargar .bashrc. pon solo cosas agnósticas de bash .profile, como PATHy LC_*esas cosas. Pon el resto adentro .bashrc.
lesmana
@Rich Homolka ¿Por qué [-f $ HOME / .bashrc] dos veces en su comando? ¿En qué se diferencia el comando que publicaste de solo '? $ HOME / .bashrc '?
David Doria
1
Protip: No coloque nada en su .bashrc que escriba en stdout o stderr, ya que eso puede romper clientes no interactivos para cosas como SCP. Las cosas con salida (por ejemplo, me gusta que me reciban con una galleta de la fortuna y el tiempo de actividad) solo deben ir en .profile / .bash_profile
Brian A. Henning
@Lotharyx cierto. Teníamos un kshrc estándar que se exportó a stdout, explotó Xserver (colibrí excede)
Rich Homolka