GNU/Linux >> Tutoriales Linux >  >> Linux

¿Por qué no funciona ~/.bash_profile?

Estoy usando Linux Mint. Mi shell de inicio de sesión (cat /etc/passwd | grep myUserName ) es bash.

Después de iniciar mi entorno de escritorio gráfico y ejecutar un emulador de terminal desde él, puedo ver que .bash_profile no tiene origen (vars de entorno que son export ed en él no están configurados). Pero si inicio sesión desde una consola de texto (ctrl +alt +F1 ) o ejecute manualmente bash -l desde el emulador de terminal, .bash_profile funciona bien.

¿Me equivoco cuando pienso que .bash_profile debe obtenerse cuando se inicia X y todo export ‘ed vars debería estar disponible en la terminal, ejecutándose desde X?

PD Colocando todo en .bashrc y obtenerlo de .bash_profile no es una buena idea (https://stackoverflow.com/questions/902946/):las cosas del entorno deben obtenerse solo una vez.

Respuesta aceptada:

El archivo ~/.bash_profile es leído por bash cuando es un shell de inicio de sesión. Eso es lo que obtienes cuando inicias sesión en modo de texto.

Cuando inicia sesión en X, los scripts de inicio son ejecutados por /bin/sh . En Ubuntu y Mint, /bin/sh es dash, no bash. Dash y bash tienen las mismas funciones principales, pero dash se adhiere a estas funciones principales para ser rápido y pequeño, mientras que bash agrega muchas funciones a costa de requerir más recursos. Es común usar guión para secuencias de comandos que no necesitan funciones adicionales y bash para uso interactivo (aunque zsh tiene muchas funciones más agradables).

La mayoría de las combinaciones de administrador de pantalla (el programa en el que escribe su nombre de usuario y contraseña) y entorno de escritorio leen ~/.profile desde los scripts de inicio de sesión en /etc/X11/Xsession , /usr/bin/lightdm-session , /etc/gdm/Xsession o el que sea aplicable. Así que ponga sus definiciones de variables de entorno en ~/.profile . Asegúrese de usar solo la sintaxis compatible con el guión.

Entonces, ¿qué deberías poner dónde?

  • Un buen .bash_profile carga .profile y carga .bashrc si el shell es interactivo.

    . ~/.profile
    if [[ $- == *i* ]]; then . ~/.bashrc; fi
    
  • En .profile , poner definiciones de variables de entorno y otras configuraciones de sesión como ulimit .

  • En .bashrc , coloque la configuración interactiva de bash, como alias, funciones, finalización, enlaces de teclas (que no están en .inputrc ), …
Relacionado:Debian 9:¿Después de actualizar desde 8, MySQL (MariaDB) ya no funciona?
Linux
  1. ¿Por qué la tilde (~) no se expande dentro de comillas dobles?

  2. ¿Por qué The Bash Script no reconoce los alias?

  3. ¿Por qué "sudo Su" en un script de Shell no ejecuta el resto del script como root?

  4. ¿El propósito de .bashrc y cómo funciona?

  5. El Bash'?

.bashrc frente a .bash_profile

¿Por qué Cryptkeeper no funciona en 12.04?

¿Por qué la PC no reproduce DVD?

¿Por qué Bash `(())` no funciona dentro de `[[]]`?

¿Cómo funciona el patrón <( cmd ) en bash?

¿Por qué el bit setuid funciona de manera inconsistente?