bash_profile macos bash shell unix user-profile

macos - ¿Cómo cargar ~/.bash_profile cuando se ingresa a bash desde zsh?



uninstall oh my zsh (7)

He usado bash durante dos años, y solo traté de cambiar a zsh shell en mi OS X a través de homebrew. Y configuré mi shell predeterminado (inicio de sesión) en zsh, y confirmé que está configurado correctamente al ver que cuando inicio mi Terminal, es el shell zsh que se usa de forma predeterminada.

Sin embargo, cuando intento ingresar bash shell desde zsh, parece que no estoy cargando ~/.bash_profile , ya que no puedo ejecutar mi comando usando alias, que se define en mi ~/.bash_profile como alias julia="~/juila/julia" , etc. Además, el mensaje no es lo que configuré en el archivo y, en cambio, bash-3.2$ .

Por algunas razones, cuando configuro mi shell de inicio de sesión en bash, y escribo zsh desde bash, entonces ~/.zshrc se carga correctamente.

Entonces, ¿por qué no se carga cuando ejecuto bash desde zsh? Mi ~/.bash_profile está vinculado simbólicamente a ~/Dropbox/.bash_profile para sincronizarlo con mis otras computadoras. Tal vez causa el problema?


Abra ~/.zshrc y, al final del archivo, agregue lo siguiente:

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

Cada vez que abra el terminal, cargará lo que esté definido en ~/.bash_profile (si el archivo existe). Con eso, puedes mantener tus configuraciones personalizadas para zsh (colores, etc.). Y puedes mantener tu configuración de shell personalizada en el archivo .bash_profile .

Esto es mucho más limpio que usar bash -l IMO.

Si prefiere poner su configuración en .bashrc , o .bash_login , o .profile , puede hacer lo mismo para ellos.


Copie los contenidos de ~ / .bash_profile y péguelos en la parte inferior del archivo ~ / .zshrc.


Para complementar la excelente respuesta de @Keith Thompson:

macOS :

Como @chepner lo dice sucintamente (énfasis mío):

En OS X, bash no se usa como parte del proceso de inicio de sesión inicial [en el momento del inicio], y el proceso Terminal.app (u otros emuladores de terminal) existe fuera de las sesiones de bash preexistentes, por lo que cada nueva ventana [o pestaña - leer: shell de bash interactivo] (por defecto) se trata a sí mismo como una nueva sesión de inicio de sesión .

Como resultado, algunos usuarios de OSX solo crean ~/.bash_profile , y nunca se molestan con ~/.bashrc , porque TODOS los shells de bash interactivos son shells de inicio de sesión .

Linux :

En Linux, la situación generalmente se invierte : los shells de bash creados de forma interactiva son shells no interactivos [ de entrada ], por lo que lo que importa es ~/.bashrc .

Como resultado, muchos usuarios de Linux solo tratan con ~/.bashrc .

Para mantener los perfiles de bash que funcionan en AMBAS plataformas , use la técnica que @Keith Thompson menciona:

  • Ponga sus definiciones (alias, funciones, ...) en ~/.bashrc
  • Agregue la siguiente línea a ~/.bash_profile

[[ -f ~/.bashrc ]] && . ~/.bashrc


Para los usuarios de ZSH en MacOs, terminé con una sola línea.

En la parte inferior de ~ / .zshrc agregué la siguiente línea:

bash -l

Lo que hace es simplemente cargar la configuración de .bash_profile (alias, función, exportar $ PATH, ...)

Si decide deshacerse de ZSH y volver a BASH simple, volverá a la normalidad sin ningún problema.


Recientemente instalé oh-my-zsh en OS X y establecí zsh como shell predeterminado y enfrenté el mismo problema.
solved este problema agregando source ~/.bash_profile al final del archivo .zshrc .


Si esto es algo que usted hace con poca frecuencia, o simplemente no es apropiado para hacer cambios, también puede ''crear'' el archivo .bash_perfil después de iniciar el shell bash secundario.

. ~/.bash_profile

Esto mostrará las configuraciones que realice en el script .bash_profile durante la vida de esa sesión de shell. En la mayoría de los casos, debería poder repetir ese comando, por lo que también es una forma fácil de probar cualquier cambio que realice sin necesidad de iniciar sesión por completo, así como actualizar todas sus sesiones de shell existentes si realiza actualizaciones a los archivos .bash_profile y / o .bashrc .


Un bash interactivo lee tu ~/.bash_profile si es un shell de inicio de sesión, o tu ~/.bashrc si no es un shell de inicio de sesión.

Un .bash_profile típico contendrá algo como:

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

por lo tanto .bashrc puede contener comandos para ser ejecutados por shells de inicio de sesión o no de login.

Si ejecuta bash -l lugar de bash , debería leer su .bash_profile .

Referencia: https://www.gnu.org/software/bash/manual/html_node/Bash-Startup-Files.html