De acuerdo con la respuesta a ¿Qué son los shells de inicio de sesión y de no inicio de sesión? en Ask Ubuntu, GNOME Terminal es un tipo de shell sin inicio de sesión.
Como se señala en el excelente libro, A Practical Guide to Fedora and Red Hat Enterprise Linux, 6th Edition :
un shell interactivo sin inicio de sesión ejecuta comandos en el archivo ~/.bashrc. El archivo predeterminado ~/.bashrc llama a /etc/bashrc.
Como resultado, /etc/profile
no se procesará en un shell que no sea de inicio de sesión. Sin embargo, descubrí que he agregado la ruta de inicio de Java a PATH
variable y, cuando uso GNOME Terminal y emito el comando java
, todo va bien. Además, el valor de PATH
variable es el mismo que el valor que definí en /etc/profile
.
En vista de los hechos mencionados anteriormente, hay un conflicto, ¿qué hay de malo en mi entendimiento?
Respuesta aceptada:
Cuando inicia sesión en su sesión x a través de un administrador de visualización o en un tty, /etc/profile
es (por lo general, aparentemente en su caso, aunque algunos shells gráficos no lo leen) obtenido por su programa de shell. Después de eso, un archivo local (asumo que estás usando bash aquí) ~/.bash_profile
, ~/.bash_login
o ~/.profile
se obtendrá, y cualquier variable de entorno definida aquí anulará /etc/profile
para el usuario actual. Este entorno es heredado por cualquier shell que abra dentro de la sesión. Es por eso que podemos definir variables de entorno, como su RUTA, en estos archivos.
Cuando abre gnome-terminal, sí, de manera predeterminada, inicia un shell sin inicio de sesión, pero hereda su entorno de usuario ya cargado desde el shell de inicio de sesión o el shell gráfico. Desde ~/.bashrc
se obtiene al iniciar un shell interactivo (p. ej., al abrir gnome-terminal), se puede usar para anular algunos elementos del entorno (como PS1).
(gnome-terminal en sí es una aplicación, no un shell)