¿Qué archivos de configuración deberían usarse para configurar variables de entorno con bash?

9

Como pregunté y obtuve respuestas aquí , y aquí , la variable PATH tiene diferentes nombres de ruta dependiendo de cómo se active la aplicación.

  • ¿Qué archivos de configuración (.bashrc, .profile, ...) deberían usarse para tener la misma variable PATH sin importar cómo inicio el software con bash?
prosseek
fuente

Respuestas:

15

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_profilesi este archivo existe y ~/.profilesi ~/.bash_profileno 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 .profilese 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 ~/.profileno 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_profilese lee si existe, y de lo ~/.profilecontrario; si inicia sesión con gdm, solo ~/.profilese lee; si inicia sesión con xdm, ~/.profileno 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 ~/.bashrco 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.

Gilles 'SO- deja de ser malvado'
fuente
Algunas aplicaciones invocan shells interactivos sin inicio de sesión, lo que significa que .profile y .bash_profile no se leen. Si desea configurar los entornos para esas aplicaciones, una forma de hacerlo es configurarlos en .bashrc aunque no se supone que sea el lugar adecuado para ello; ver github.com/mobile-shell/mosh/issues/102#issuecomment-12503646
William
@William .profilese lee cuando inicia sesión. Poner variables de entorno .bashrcno 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.
Gilles 'SO- deja de ser malvado'
mosh no es una GUI, es una alternativa a ssh. No estoy defendiendo su comportamiento, solo estoy tratando de ayudar a otros que enfrentan el mismo problema que yo y otros hemos tenido, como se describe en el tema de Github que relacioné.
William
2

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 eshellno lo es bash. Asumir que eshellse cargaría .bashrces tan defectuoso como asumir zsho cshse cargaría .bashrc. Es un caparazón diferente.

Veo dos opciones:

  1. Cree su propio script que tome una lista de directorios y genere el código bash apropiado para bashy el código elisp eshell.
  2. Configure su variable de entorno ESHELL o SHELL para que realmente ejecute bash dentro de emacs. Eso es lo que hago. Bash funciona bien en emacs.

También podría estar interesado en la discusión sobre cómo agregar un directorio a una ruta sin duplicados .

Doug Harris
fuente
1

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.

garyjohn
fuente