Respuestas:
Tradicionalmente, el lugar para definir variables de entorno por usuario en sistemas unix es ~/.profile
. Este archivo lo lee el shell de inicio de sesión (es decir, el programa que se inicia cuando inicia sesión y en el que puede escribir comandos), siempre que el shell de inicio de sesión sea un shell compatible con Bourne.
Bash es un shell compatible con Bourne. Cuando se invoca como un shell de inicio de sesión, se lee ~/.bash_profile
si este archivo existe y ~/.profile
si ~/.bash_profile
no existe.
Como regla general, si escribe su contraseña en modo texto (por ejemplo, en una consola de texto o remotamente con ssh), el shell que obtiene es un shell de inicio de sesión.
Sin embargo, si escribe su contraseña en un programa gráfico y se registra en un entorno gráfico, esto omite el shell de inicio de sesión normal. Si .profile
se lee en este caso depende de cómo se configure la sesión gráfica; por ejemplo, varía entre distribuciones de Linux, entre administradores de pantalla y entre entornos de escritorio. A veces, uno de los programas de la cadena invoca explícitamente un shell de inicio de sesión; a veces uno de los programas lee explícitamente ~/.profile
; y a veces nada de esto sucede y ~/.profile
no se lee.
Para dar un ejemplo de la variabilidad, por lo que puedo ver de un vistazo rápido a los scripts involucrados, en Ubuntu 10.04: si inicia sesión con kdm o lxdm, ~/.bash_profile
se lee si existe, y de lo ~/.profile
contrario; si inicia sesión con gdm, solo ~/.profile
se lee; si inicia sesión con xdm, ~/.profile
no se lee.
Todos los sistemas que conozco proporcionan alguna forma de establecer variables de entorno por usuario. Lamentablemente no hay una respuesta general.
Tenga en cuenta que a veces verá recomendaciones para establecer variables de entorno ~/.bashrc
o iniciar un shell de inicio de sesión en cada terminal en un entorno GUI. Ambas son malas ideas; Una de las razones es el problema que ha experimentado, a saber, que sus variables de entorno solo estaban disponibles en programas iniciados a través de un terminal, y no en programas iniciados directamente con un icono o menú o método abreviado de teclado.
.profile
se lee cuando inicia sesión. Poner variables de entorno .bashrc
no funciona, y su escenario ilustra que: la aplicación (presumiblemente GUI) que ejecuta este shell debería tener sus variables de entorno, pero si las define .bashrc
, no funciona. t.
La respuesta definitiva está en la sección de la página del manual de bash en Bash Startup Files . "Cuando se inicia un shell interactivo que no es un shell de inicio de sesión, Bash lee y ejecuta comandos desde ~ / .bashrc, si ese archivo existe".
Las respuestas a sus otras preguntas indican que eshell no se ejecuta realmente bash
. Emacs eshell
no lo es bash
. Asumir que eshell
se cargaría .bashrc
es tan defectuoso como asumir zsh
o csh
se cargaría .bashrc
. Es un caparazón diferente.
Veo dos opciones:
bash
y el código elisp eshell
.También podría estar interesado en la discusión sobre cómo agregar un directorio a una ruta sin duplicados .
Establecer su RUTA en su ~ / .profile debería funcionar. Ese archivo se lee al iniciar sesión en cada shell compatible con POSIX o similar a Bourne que conozco incluyendo bash. Si realiza cambios en ese archivo, deberá cerrar sesión y volver a iniciarla para que los cambios surtan efecto. Dado que PATH es parte del entorno de su proceso de inicio de sesión, debe exportarse a cada shell que inicie posteriormente.