.bashrc no se ejecuta al abrir una nueva terminal


84

El código en .bashrc no se ejecuta cuando abro una nueva ventana de terminal en Ubuntu 12.04. Me di cuenta de esto al crear un archivo .bash_aliases. Los alias no aparecieron cuando abrí una nueva terminal. Sin embargo, cuando source .bashrcescribo los alias aparecieron.

.bashrc debe ejecutarse cada vez que abro una nueva ventana de terminal, ¿verdad?

¿Cómo hago que esto suceda?


Prueba .profile en su lugar.
jippie

44
@jippie No, .profilese lee en el momento de iniciar sesión, no cuando abre una nueva terminal, a menos que haya una configuración incorrecta en alguna parte. Selah: ¿cambiaste algo de la configuración predeterminada? Ejecútelo ps -o command $$ $PPIDen una terminal y copie y pegue la salida.
Gilles

1
Solo para asegurarme de que estás poniendo .bashrcen tu carpeta de inicio, ¿verdad?
Jjed

Tal vez quiera comprobarlo echo $SHELL. Esto me sucedió y el shell era / bin / sh en lugar de bash. Corríjalo en / etc / passwd y su ejecución .bashrc.
Joe Flynn

Respuestas:


129

No necesariamente se ejecuta; en la parte superior del estándar .bashrc está este comentario:

# ~/.bashrc: executed by bash(1) for non-login shells.
# see /usr/share/doc/bash/examples/startup-files (in the package bash-doc)
# for examples

Creo que hay una opción para ejecutar bash terminal como shell de inicio de sesión o no. Con Ubuntu, gnome-terminal normalmente no se ejecuta como un shell de inicio de sesión, por lo que .bashrc debe ejecutarse directamente.

Para shells de inicio de sesión (como los terminales virtuales), normalmente el archivo ~/.profilese ejecuta, a menos que tenga cualquiera ~/.bash_profileo ~/.bash_login, pero no están allí por defecto. Por defecto, Ubuntu usa solo .profile.

El estándar ~/.profiletiene esto en él:

if [ -n "$BASH_VERSION" ]; then
    # include .bashrc if it exists
    if [ -f "$HOME/.bashrc" ]; then
        . "$HOME/.bashrc"
    fi
fi

Esto ejecuta .bashrc si está disponible, suponiendo que $ BASH_VERSION esté presente en su entorno. Puede verificar esto ingresando el comando echo $BASH_VERSION, y debe mostrar cierta información sobre el número de versión; no debe estar en blanco.


44
Después de comprender estas instrucciones, entré en mi aplicación de terminal, fui a editar -> preferencias de perfil -> Título y comando -> Ejecutar comando como un shell de inicio de sesión. Desmarqué esto. Gracias por la ayuda.
Selah

¿Puede aclarar cuándo .profile (por lo tanto .bashrc) se carga / lee? Parece que esto se hace cuando los usuarios inician sesión en su sesión de escritorio. La respuesta sugiere que esto ocurre cuando inicia una nueva sesión de terminal / shell "Para shells de inicio de sesión (como los terminales virtuales), normalmente el archivo ~ / .profile se ejecuta ..."
hedgehog

44
Está normalmente ejecuta cuando se inicia una nueva shell de entrada (sesión no muy escritorio, porque se puede ejecutar un nuevo shell de inicio de la sesión de escritorio). Como dije, se ejecuta de manera predeterminada, pero no si ha creado ~/.bash_profileo ~/.bash_login. Puede probar marcando o desmarcando la casilla de verificación Edit -> Profile Preferences -> Title and Command -> "Run command as a login shelly salir y volver a ejecutar el terminal. Podrías repetir algo de .profile para probar.
Marty Fried

@Selah Tu comentario me ayudó más que la respuesta real;) ¡muchas gracias por hacer el comentario!
Aleks

Por lo tanto, si ha creado ~/.bash_profileo ~/.bash_loginen su sistema y desea conservarlos, pero aún desea ejecutarlos ~/.profiledesde allí ~/.bashrc, puede obtenerlos desde su cuenta ~/.bash_profileo ~/.bash_logincon una línea que los contenga source "$HOME/.profile". ¡Le devuelve la salida coloreada de ls también en shells de inicio de sesión!
tanius

26

En mi caso, simplemente .bashrcfaltaban las líneas del cargador en.bash_profile

# include .bashrc if it exists
if [ -f "$HOME/.bashrc" ]; then
    . "$HOME/.bashrc"
fi

Lo agregué manualmente y funcionó con mi nuevo inicio de sesión


3
.bash_profile? Ubuntu usa un .profilepor defecto, no .bash_profile.
muru

el servidor ubuntu a menudo no recoge .bashrc ... arriba funciona y también lo hace ... cat .bash_profile [[-s "$ HOME / .bashrc"]] && source "$ HOME / .bashrc" # Carga el valor predeterminado
Scott Stensland

¡Esto lo resolvió para mí! Agregué pcrey parece que sobrescribió el perfil de bash en lugar de agregarlo.
Shapiro Yaacov

7

.bash_profilecontiene la configuración para el shell bash. Cuando abre una terminal, primero lee y ejecuta comandos desde ~/.bash_profile. Entonces puede agregar lo siguiente .bash_profilepara configurar el shell de acuerdo con bashrc.

. ~/.bashrc

A menos que su terminal esté ejecutando un shell de inicio de sesión (que no está predeterminado en Ubuntu), ~/.bash_profileno se leerá (y no existe de manera predeterminada en Ubuntu)
muru

5

Si $BASH_VERSIONno está configurado, intente usar el chshcomando para configurar su shell /bin/bash.

Tuve un problema similar con 12.04 LTS, y resultó que la nueva cuenta de usuario tenía el shell predeterminado configurado /bin/sh, que fue la causa del problema.


Esta fue la razón!
mulya

1

Según el comentario en .profile

~ / .profile: ejecutado por el intérprete de comandos para shells de inicio de sesión.¬ 11 bash (1) no lee este archivo si ~ / .bash_profile o ~ / .bash_login¬ 10 # existe

Así que ahí va, si ~/.bash_profileo ~/.bash_login exists, esos se ejecutarán en lugar de~/.profile

Si desea ejecutar ~/.bashrcsólo tiene que añadir la línea source ~/.bashrcdebash_profile


1
He experimentado exactamente el mismo problema. Mi .bashrcfuente se obtuvo hasta que creé un .bash_profilearchivo. Así que antepuse la source ~/.bashrc línea a mi .bash_profilearchivo.
Lashae

0

En lugar de pasar por todo eso, simplemente vaya Edit -> Profile Preferences -> Title and Command -> "Run a custom command instead of my shell"y en el cuadro de comando personalizado escriba bashy ciérrelo. La próxima vez que abra la terminal, también se ejecutará bash automáticamente.


¿A qué GUI te refieres? gnomo o unidad
Nic Wanavit
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.