427 votos

¿Cuál es la diferencia entre .bash_profile y .bashrc?

Para hacer un alias para la Terminal en OS X, puede poner los alias en .bash_profile o .bashrc . ¿Cuál es la diferencia entre los dos y por qué elegiría poner alias en uno y no en el otro?

8 votos

No es por desanimar el conocimiento de unix aquí, pero bash es una bestia pura de UNIX, así que podrías obtener mejor conocimiento o tener esta pregunta respondida varias veces en un sitio asociado. Hay más de 200 pares de preguntas/respuestas sobre bashrc en unix

2 votos

También hay un perfil... Ver esta pregunta en Stack Overflow.

2 votos

Si usted brew install bash y utilizar iTerm2, podría establecer profile -> command a /usr/local/bin/bash que cargará .bashrc por defecto después de .bash_profile . Esto también te da Bash 4 goodies...

434voto

geocoin Puntos 121

.bash_profile se ejecuta para los shells de inicio de sesión, mientras que .bashrc se ejecuta para los shells interactivos que no son de acceso.

Cuando te conectas (escribe el nombre de usuario y la contraseña) a través de la consola, ya sea sentado en la máquina, o de forma remota a través de ssh: .bash_profile se ejecuta para configurar su shell antes del prompt de comandos inicial.

Pero, si ya has entrado en tu máquina y abres una nueva ventana de terminal (xterm) entonces .bashrc se ejecuta antes de la ventana del símbolo del sistema. .bashrc también se ejecuta cuando se inicia una nueva instancia de bash escribiendo /bin/bash en una terminal.

En OS X, Terminal ejecuta por defecto un shell de inicio de sesión cada vez, así que esto es un poco diferente a la mayoría de los otros sistemas, pero se puede configurar en las preferencias.

113 votos

On OS X, Terminal by default runs a login shell every time - Siempre he estado muy confundido por no darme cuenta de esto. ¡Gran información!

8 votos

Estoy en OS X y uso zshell en lugar de bash, y iTerm en lugar de Terminal. A pesar del hecho de que estoy usando un terminal diferente y una shell diferente a la respuesta discute, OS X todavía parece estar considerando todo un shell de inicio de sesión, porque .zprofile se ejecuta cada vez.

4 votos

Para aquellos que busquen una explicación completa de las combinaciones de shells de inicio de sesión/no inicio de sesión e interactivos/no interactivos y cuándo ejecutan estos archivos de configuración, consulte unix.stackexchange.com/a/46856/38715

77voto

Lloyd Cotten Puntos 1388

X11 mirará su .bashrc mientras que un Terminal "normal" mirará .bash_profile

Sin embargo, si añade lo siguiente a su .bash_profile Entonces, puede trasladar todo a su .bashrc para consolidar todo en un solo lugar en lugar de dos:

if [ -f $HOME/.bashrc ]; then
        source $HOME/.bashrc
fi

0 votos

O simplemente puedes hacer cd ~ ; ln -s .bashrc .bash_profile .

7 votos

Estos 2 archivos de configuración tienen una función claramente separada. En algunos casos, es necesario tener cosas para inicializar al principio de la sesión y sólo allí ( ~/.bash_profile ). A menudo también es necesario tener cosas que definir de forma incremental en cada nivel del shell ( ~/.bashrc ). No es la mejor idea sugerir que se suprima esta libertad.

4 votos

@danielAzuelos: Lurch se ha dejado esta parte, pero las fuentes de OS X Terminal ~/.bash_profile para cada nueva ventana/pestaña, por lo que no hay realmente una manera de separar las dos en lo que respecta a Terminal.

32voto

Donovan Puntos 1803

En el caso de MacOS, el código que hay que poner en .bash_profile para consolidar todo en .bashrc es la siguiente:

if [ -f ~/.bashrc ]; then
    source ~/.bashrc
fi

Esto es más específico para los usuarios de terminales Mac.

13voto

Tiago Cruz Puntos 107

TLDR; utilizar .bash_profile para sus alias.

La forma en que los diferentes archivos de inicialización trabajan juntos es un poco más complicada, y hay algunos casos especiales importantes en OSX. Estos son los más destacados:

  • Bash, en cualquier plataforma, ejecuta uno de varios archivos diferentes dependiendo de cómo sea invocado. Los detalles son aquí .
  • La aplicación Terminal de OSX hace algo no estándar: crea cada nueva pestaña o ventana como si fuera un shell de inicio de sesión, lo que significa que .bash_profile se llama. De ahí el consejo TLDR anterior.
  • .bashrc también es una opción, pero se llamará cada vez que se cree un subshell (es decir, se invoca bash ), lo que puede crear ineficiencia si se actualiza una variable dentro de ella (por ejemplo PATH=/bin/foo:$PATH )
  • Otras aplicaciones que tienen terminales incrustados pueden optar por seguir la convención de Terminal App o no. En particular, Visual Studio Code, por defecto, no .
  • Las aplicaciones invocadas a través de la interfaz gráfica de usuario no se generan desde un shell. Por lo tanto, hay varios mecanismos que compiten para establecer variables de entorno para que las vean, que tienen ha cambiado a lo largo de los años .
  • Fragmentos que llaman a .bashrc de .bash_profile son bastante comunes.

0voto

Para ubuntu/debain añado este código al final de .bashrc :

 if [ -f ~/.bash_profile ]; then
    source ~/.bash_profile
 fi

Ahora mis alias tienen efecto en todas las nuevas terminales (o pestañas) abiertas

AppleAyuda.com

AppleAyuda es una comunidad de usuarios de los productos de Apple en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X