284 votos

¿Por qué .bashrc no se ejecuta automáticamente?

Puse algunos comandos de alias en mi .bashrc para que se carguen cada vez que abra una nueva ventana de Terminal. Sin embargo, esto no sucede.

Tengo que seleccionar run script: en el Terminal>Preferencias>" MiTemaPorDefecto ">Prefpane de Shell y añadir: source .bashrc && clear para que funcione...

Esto parece extraño ya que muchos tutoriales sólo dicen que usted sólo tiene que añadir a la .bashrc archivo y todo va bien.

Tenga en cuenta que no corro en bash cuando uso el terminal, me gusta mas el otro (por defecto) (no se cual es), porque me muestra donde estoy todo el tiempo eg:

>>d54c6b47b:~ romeo$

en lugar de:

>>bash$

En bash todo se carga como debe ser.

Así que mi pregunta es, ¿por qué mi .bashrc ¿tengo que añadir la opción para llamarlo cada vez?

También algún tutorial me dijo que hiciera algo así como:

$alias la=’ls -la’ >> ~/.bashrc

que debería escribir el alias en mi .bashrc Esto tampoco funciona...

Ten en cuenta que soy un novato en UNIX, así que sé amable.

0 votos

Creo que esto está muy cerca de apple.stackexchange.com/questions/7984/ .

1 votos

Si, en cambio, utiliza la opción por defecto zsh shell (no i.e: bash ) configurado en OS X 2019+ (actualmente Catalina), consulte apple.stackexchange.com/a/338622/192005

0 votos

@mmmmmm he retrocedido tu edición. La pregunta es claramente acerca de bash, e incluso hay algunas respuestas recientes señalando que zsh funciona de manera diferente.

293voto

Tundey Puntos 2145

Ya he pasado por eso. Lo que me di cuenta, OS X no lee .bashrc al iniciar bash. En su lugar, lee los siguientes archivos (en el siguiente orden):

  1. /etc/profile
  2. ~/.bash_profile
  3. ~/.bash_login
  4. ~/.profile

Ver también Chris Johnsen de la Comisión Europea:

Por defecto, Terminal inicia el shell mediante /usr/bin/login que hace que el intérprete de comandos sea un intérprete de comandos de inicio de sesión. En todas las plataformas (no sólo Mac OS X) bash no utiliza .bashrc para las conchas de inicio de sesión (sólo /etc/profile y el primero de .bash_profile , .bash_login , .profile que existe y es legible). Por eso "put source ~/.bashrc en su .bash_profile " es un consejo habitual

I normalmente sólo pongo las cosas que normalmente pondría en ~/.bashrc a ~/.profile - ha funcionado hasta ahora a las mil maravillas.

7 votos

Re "Normalmente sólo pongo las cosas que normalmente pondría en ~/.bashrc en ~/.profile": Para una máxima compatibilidad te recomiendo que sigas el consejo de Chris Johnsen y pongas todo lo que quieras aplicar a shells que no sean de inicio de sesión en ~/.bashrc y añadas "source ~/.bashrc" a tu ~/.bash_profile para ejecutarlo para shells de inicio de sesión. De lo contrario, no funcionará para sub-shells, o si Terminal cambia para crear shells que no sean de inicio de sesión, o si alguna vez usas xterm u otro programa de terminal que cree shells que no sean de inicio de sesión por defecto, o si quieres usar la misma configuración en otro SO.

4 votos

En una nota relacionada, en Mac OS X deberías considerar hacer que ~/.bashrc ejecute /etc/bashrc para recoger comportamientos globales. En particular, hay código en /etc/bashrc para actualizar el directorio de trabajo en cada prompt, que es lo que permite a Terminal mostrar el icono del proxy, crear nuevos terminales en el mismo directorio, y restaurar el directorio de trabajo para Reanudar y Grupos de Windows.

0 votos

Para mí, sourcing .bashrc de .bash_profile no funcionó. Pero el abastecimiento de .bashrc / .bash_profile desde .profile funcionó.

127voto

Cassidy James Puntos 101

Pon eso en tu .profile de tu directorio home y debería funcionar la próxima vez que inicies un nuevo shell o después de ejecutar source ~/.profile

Este enlace indica claramente el orden en que el shell lee y carga los archivos de inicio: http://hayne.net/MacDev/Notes/unixFAQ.html#shellStartup

0 votos

Aceptó éste porque tiene solución (y fue el primero de dos posts casi idénticos).

61 votos

Votado negativo. Recomiendo no seguir este consejo. El problema es que Terminal crea conchas de inicio de sesión, y Bash conchas de inicio de sesión sólo ejecutar el inicio de sesión script, no ~/.bashrc . Sin embargo, la solución no es simplemente colocar su .bashrc en el archivo de inicio de sesión, porque estos dos archivos están destinados a realizar diferentes tipos de configuración. En su lugar, la configuración canónica para Bash es tener su ~/.bash_profile fuente su ~/.bashrc en algún punto apropiado del script (normalmente el último).

0 votos

No veo ningún otro post idéntico esto sólo dice poner en el archivo sh

35voto

reefnet_alex Puntos 5850

Puse todo en ~/.bashrc y sólo source ~/.bashrc en .profile.

Esto permite que las sesiones de pantalla y xterm (y supongo que tmux) hereden mi entorno ya que las sesiones que no son de inicio de sesión sólo se ejecutan .bashrc mientras que las sesiones de inicio de sesión (por ejemplo, terminal o iTerm) sólo ejecutan .profile .

1 votos

Este es mi enfoque. De esta manera puedo mantener un .bashrc que funcione en ambos sistemas... y puedo poner cualquier cosa específica de mac o cosas como alias que son sólo para el trabajo (donde más uso el mac) en mi archivo .bash_profile.

6 votos

Tenga en cuenta que .profile es común a varios shells y sólo debería contener código sh compatible con POSIX. Si el código fuente es .bashrc podría decirse que contiene código específico de Bash (la existencia del .bashrc es específico de Bash). Le recomiendo que cambie el nombre de su .profile a .bash_profile ya que lo estás utilizando de forma específica para Bash. O, pon código genérico en .profile y crear un .bash_profile que las fuentes .profile y .bashrc .

11voto

DanielSank Puntos 9248

Sourcing .profile en .bash_profile lo hizo por mí

echo 'source ~/.profile' >> ~/.bash_profile

2 votos

El origen de .profile en .bash_profile es una gran cosa que hacer, pero eso solo no causaría que .bashrc sea ejecutado por los shells de inicio de sesión. Tu .profile ya debe haber originado .bashrc, lo que podría causar problemas si alguna vez usas un shell que no sea bash. La mayoría de los usuarios de Mac nunca lo harán, pero si lo haces por alguna razón, recuerda esto. :)

0 votos

Para ampliar lo que dijo @TerryN: asegúrese de que la fuente .bashrc de su .bash_profile y no de .profile . .bash_profile es específico de Bash y debería ser la fuente de los otros dos.

1 votos

En 2019+ (instalaciones de Mac OS X Caltalina), el shell por defecto es zsh . No se abastece .bash* automáticamente y comienza con .profile .

6voto

user26099 Puntos 41

Encontré que después de instalar rvm (auto-instalador, sin ediciones manuales) había creado un ~/.bash_login por sí mismo, donde antes no tenía ninguno.

Sin embargo, esto significa que mi ~/.profile Las configuraciones y los alias ya no se cargaban. Muchos accesos directos desaparecieron. Pensaba que se ejecutaban secuencialmente, no de forma exclusiva :-/

He añadido

. ~/.profile 

a ~/.bash_login encadenar las cosas como esperaba.

0 votos

+1, esta es la situación que tuve. Encontré que ya sea .bash_login o .bash_profile evitarán que .profile se ejecute... Ni idea de por qué bash siente la necesidad de tener tantos archivos de inicio en conflicto.

1 votos

.profile es común a varios shells diferentes y sólo debería contener código sh compatible con POSIX. .bash_profile es específico de Bash y puede contener código específico de Bash. En general, si estás usando Bash deberías preferir .bash_profile a menos que tenga cuidado de asegurarse de que su código de inicio no contiene nada que dependa de Bash. Cualquier programa creado .bash_login probablemente lo haya hecho porque contiene código específico de Bash, pero debería haber incluido código para fuente .profile si existe.

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