Problema
Tengo una máquina virtual Ubuntu 11.04 y quería configurar mi entorno de desarrollo Java. Hice lo siguiente
sudo apt-get install openjdk-6-jdk
Se agregaron las siguientes entradas a ~ / .bash_profile
export JAVA_HOME=/usr/lib/jvm/java-6-openjdk export PATH=$PATH:$JAVA_HOME/bin
Guarde los cambios y salga
Abre una terminal nuevamente y escribe lo siguiente
echo $JAVA_HOME (blank) echo $PATH (displayed, but not the JAVA_HOME value)
No pasó nada, como si la exportación de JAVA_HOME y su adición a la RUTA nunca se hicieran.
Solución
Tuve que ir a ~ / .bashrc y agregar la siguiente entrada al final del archivo
#Source bash_profile to set JAVA_HOME and add it to the PATH because for some reason is not being picked up
. ~/.bash_profile
Preguntas
- ¿Por qué tuve que hacer eso? Pensé que bash_profile, bash_login o profile en ausencia de esos dos se ejecutan primero antes de bashrc.
- ¿Era en este caso mi terminal un shell sin inicio de sesión ?
- Si es así, ¿por qué al hacer su después de la terminal y poner la contraseña no ejecutó el perfil donde también había configurado las exportaciones mencionadas anteriormente?
.profile
solo debe obtenerse cuando inicie sesión..profile
bash ignora si.bash_profile
existe. Vea mi respuesta aquí yman bash
para más detalles..profile
.Puede verificar si su shell Bash se inicia como un shell de inicio de sesión ejecutando:
Si la respuesta es
off
que no está ejecutando un shell de inicio de sesión.Lea la sección de invocación del manual de Bash sobre cómo Bash lee (o no lee) diferentes archivos de configuración.
Extracto de
man bash
:su
por otro lado, tampoco inicia un shell de inicio de sesión de forma predeterminada, debe indicarle que lo haga mediante la--login
opciónfuente
Creo que vale la pena mencionar que puede cambiar el valor predeterminado de gnome-terminal para usar un shell de inicio de sesión (es decir, bash -l) editando las preferencias del perfil.
vaya a Editar -> Preferencias de perfil -> pestaña Título y comando, marque la opción "Ejecutar comando como un shell de inicio de sesión"
fuente
~/.bash_profile
está evaluando realmente rápido, lo que probablemente sea el caso. Una buena cosa para verificar es descartar cualquier llamada a otros procesos que generalmente son bastante costosos.Si abre una terminal o ejecuta
su
el shell no se ejecuta como un shell de inicio de sesión sino como un shell interactivo normal. Entonces se lee~/.bashrc
pero no~/.bash_profile
. Puede ejecutarsu
con la-l
opción de hacer que ejecute su shell como un shell de inicio de sesión.Cuando está trabajando con una GUI, el shell generalmente nunca se ejecuta como un shell de inicio de sesión, por lo que generalmente está bien poner todo lo que necesita
~/.bashrc
.fuente
TL; DR
En la configuración clásica recomendada de ubuntu,
~/.bash_profile
se evalúa solo en ocasiones específicas. Y tiene sentido.Pon tus cosas adentro
~/.bashrc
, serán evaluadas cada vez.Ok, quiero entender, ¿por qué tiene sentido?
Puntos clave para entender lo que está sucediendo:
Por lo tanto, el tiempo de "inicio de sesión" suele ser:
ssh
, como el shell será el padre de todo el proceso, cargará su~/.bash_profile
.gnome-session
para ubuntu clásico) se encargará de leer.profile
.Ok, entonces, ¿dónde poner mis cosas?
Es bastante complejo, la historia completa está aquí . Pero aquí hay un descuido que es bastante común para los usuarios de ubuntu. Entonces considerando eso:
bash
shell,~/.bash_profile
y sigue la recomendación de agregar la carga de~/.bashrc
en su~/.bash_profile
para obtener al menos un archivo que se evalúa sea cual sea el mecanismo de invocación .Esta es una sugerencia rápida de dónde colocar las cosas.
~ / .bashrc (se evalúa en todas las ocasiones , siempre que siga la recomendación)
Para una variable de entorno de evaluación rápida y código para su uso de línea de comandos solo para usuarios y bash (alias, por ejemplo). El bashismo es bienvenido.
Se carga sobre sí mismo sobre:
bash
screen
nuevo panel o pestaña. (notmux
!)terminator
/gnome-terminal
...) si no marca la opción "ejecutar comando como shell de inicio de sesión".Y se cargará en cualquier otra ocasión gracias a la recomendación previa.
~ / .bash_profile (se evalúa solo en ocasiones específicas )
Para variables de entorno de evaluación lenta y código para sus procesos de sesión de consola y solo de usuario . El bashismo es bienvenido. Se carga en:
tmux
nuevo panel o ventanas (configuración predeterminada), (screen
¡ no !)bash -l
,terminator
/gnome-terminal
...) solo si marca la opción "ejecutar comando como shell de inicio de sesión".~ / .profile (se evalúa solo en sesión gráfica)
Para variables de entorno de evaluación lenta y sin bashism para sus procesos de sesión gráfica y solo para usuarios . Se carga al iniciar sesión en su interfaz gráfica de usuario.
fuente
.profile
si.bash_profile
no existe.env
, no veo el conjunto de variables env (intenté cerrar iTerm y volver a abrir). Pero noté que cuando instalé Android Studio y otras aplicaciones, todos esos entornos se instalaron/.bash_profile
. Entonces, cuando agregué/.bash_profile
, funcionó como un encanto. ¿Porqué es eso?