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

174

Puse algunos comandos de alias en mi archivo .bashrc , para que puedan cargarse cada vez que abro una nueva ventana de Terminal. Sin embargo, esto no sucede.

Tengo que seleccionar run script: en la Terminal > Preferencias > " MyDefaultTheme " > Prefijo de Shell y agregar: source .bashrc && clear para que funcione ...

Esto parece extraño ya que muchos tutoriales dicen que solo debes agregar al archivo .bashrc y todo está bien.

Tenga en cuenta que no ejecuto bash cuando uso el terminal, me gusta el otro (predeterminado) uno (no sé qué es) mejor, porque me muestra dónde estoy todo el tiempo, por ejemplo:

>>d54c6b47b:~ romeo$

en lugar de:

>>bash$

En bash todo está cargado como debería ser.

Entonces, mi pregunta es, ¿por qué no se cargó automáticamente mi archivo .bashrc y tuve que agregar la opción para llamarlo cada vez?

También un tutorial me dijo que hiciera algo como:

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

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

Tenga en cuenta que soy un principiante de UNIX, así que sea amable.

    
pregunta romeovs 27.04.2011 - 23:08

13 respuestas

85

Simplemente coloque eso en su archivo .profile de su directorio de inicio y debería funcionar la próxima vez que inicie 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: enlace

    
respondido por el Cosu 28.04.2011 - 00:47
197

Estuve allí, hice eso. De lo que me di cuenta, OS X no lee el archivo .bashrc en el inicio de bash. En su lugar, lee los siguientes archivos (en el siguiente orden):

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

Vea también el comentario informativo y útil de Chris Johnsen :

  

De forma predeterminada, Terminal inicia el shell a través de /usr/bin/login , lo que convierte al shell en un shell de inicio de sesión. En todas las plataformas (no solo Mac OS X) bash no usa .bashrc para los shells de inicio de sesión (solo /etc/profile y el primero de .bash_profile , .bash_login , .profile que existe y es legible). Esta es la razón por la que "poner source ~/.bashrc en su .bash_profile " es un consejo estándar

Yo normalmente solo pongo las cosas que normalmente pondría en ~/.bashrc a ~/.profile ; hasta ahora ha funcionado como un hechizo.

    
respondido por el Jari Keinänen 28.04.2011 - 01:53
24

Puse todo en ~/.bashrc y solo source ~/.bashrc en .profile.

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

    
respondido por el anu 28.04.2011 - 04:11
16

Hay dos escenarios:

  1. Estás usando Linux
  2. Estás usando Mac Os X

Para ambos, usted desea obtener ~/.bashrc en su perfil que se carga o se obtiene cuando se inicia su shell para su terminal.

LINUX

En Linux, ~/.profile se origina automáticamente en su shell cuando se inicia. Entonces, si va a su terminal y escribe cd ~; ls -A , verá todos sus archivos y directorios en su directorio de inicio ( /home/usrname/ ). Debería ver un archivo llamado .profile . Este es el archivo que se "obtiene" automáticamente cuando inicia el terminal.

Si desea agregar alias y funciones a ~/.bashrc (que es lo que hago), entonces debería (dentro de ~/.profile agregar una instrucción if que compruebe si ~/.bashrc no es un archivo vacío y luego fuente.

Para verificar si su ~/.profile ya lo hace, ingrese nano ~/.profile . Esto lo abrirá en un editor de texto (puedes usar gedit si sabes que lo tienes o incluso vim si sabes cómo usarlo). Puede obtener un archivo de texto vacío (no debería), pero si lo hace, simplemente continúe. Si no ve una línea en cualquier lugar que diga source ~/.bashrc , ingrese las siguientes líneas en algún lugar (colóquela en un lugar razonable como al final o al principio y no en medio de una instrucción if) :

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

Esto comprueba si ~/.bashrc es un archivo no vacío (con if [ -s ~/.bashrc ] ), y si es así, lo genera. Bastante simple. Ahora, puede agregar cualquier alias, función, variable, etc. válidos a ~/.bashrc .

MAC OS X

Por defecto, Max OS X fuentes ~/.bash_profile . Para poder agregar cosas a ~/.bashrc (que es, de nuevo, lo que hago en OS X, también), entonces sigue el mismo procedimiento que Linux. En la terminal ingrese cd ~; nano .bash_profile . Busque una línea que diga source ~/.bashrc y, si no está allí, agregue la instrucción if ( if [ -s ~/.bashrc ]; then source ~/.bashrc; fi ).

NOTAS

Al escribir una declaración if, asegúrese de dejar espacios entre prácticamente todo (por ejemplo, if [ -s ~/.bashrc]; then echo "found"; fi no funciona porque no hay espacio entre ~/.bashrc y ] ; el intérprete pensará que esta es una palabra).

Si desea averiguar cómo verificar las cosas en una declaración if mejor, vaya a la terminal e ingrese man \[ ; Esto esencialmente le da el desglose de una sentencia if. Por ejemplo, if [ -f /path/to/file ]; then echo "it's a file"; else echo "not a file"; fi verifica si /path/to/file es un archivo y si se imprime en la salida estándar en consecuencia. Siempre hago referencia a esto también para una consulta más fácil y rápida: 7.2. Operadores de prueba de archivos .

Espero que esto ayude. Recuerdo lo confundida que estaba cuando comencé todo esto (que no fue hace mucho tiempo); Entonces, ¡buena suerte con tus futuros esfuerzos UNIX!

    
respondido por el Dylan 26.09.2014 - 17:45
10

Sourcing .profile en .bash_profile lo hizo por mí

echo 'source ~/.profile' >> ~/.bash_profile
    
respondido por el Luis S 13.10.2012 - 04:37
6

Encontré que después de instalar rvm (autoinstalador, sin ediciones manuales), había creado un archivo ~/.bash_login para sí mismo, donde anteriormente nunca tuve uno.

Sin embargo, esto significa que mis ~/.profile configuraciones y alias ya no se cargaron! Muchos atajos desaparecieron. Pensé que se ejecutaban secuencialmente, no exclusivamente: - /

Agregué

. ~/.profile 

a ~/.bash_login para encadenar cosas como esperaba.

    
respondido por el dman 28.07.2012 - 14:33
3

Poniendo ...

[[ -s "$HOME/.rvm/scripts/rvm" ]] && . "$HOME/.rvm/scripts/rvm" # Load RVM function

... en ~/.bashrc , y luego la fuente ~/.bashrc en mi ~/.bash_profile no funcionó para el programa Terminal que viene instalado.

Pero luego fui al menú desplegable Editar > Preferencias de perfil , Título y comando , y seleccionó Ejecutar comando como shell de inicio de sesión en la sección de comandos de esa página.

Después de hacerlo, al iniciar un nuevo terminal se muestra el resultado deseado cuando escribo

 type rvm|head -1

es decir, "rvm es una función". No lo hizo hasta que hice este cambio, y es el único que hice después de los cambios .bash_profile y .bashrc descritos en otras respuestas aquí.

    
respondido por el LiquidMark 15.02.2012 - 19:46
2

En primer lugar, permítame decirle que ~/.bashrc es el archivo que se ejecuta cada vez que se llama a un segundo shell (cuando se ejecuta un script de shell, por ejemplo), y ~/.profile se llama en cada inicio de sesión.

Por lo tanto, te recomiendo que escribas el comando . ~/.bashrc en tu archivo ~/.profile , y este comando ejecutará el archivo bashrc cada vez que inicies sesión.

    
respondido por el arun rana 24.09.2012 - 14:51
1

Me encontré con el mismo problema después de instalar rbenv en mi servidor remoto (Digital Ocean) Ubuntu 16.04.

De alguna manera creó ~/.bash_profile . Es el mismo ~/.bashrc en un sistema OS X.

Y Ubuntu comenzó a leer solo ~/.bash_profile , pero no ~/.bashrc como debería.

Así que acabo de hacer una copia de seguridad de mis datos en ~/.bash_profile con esto:

mv ~/.bash_profile ~/.bash_profile.bak

Y renombró el antiguo ~/.bashrc a ~/.bash_profile

mv ~/.bashrc ~/.bash_profile

Funcionó para mí. Después de mi inicio de sesión ssh tengo todo cargado en ~/.bashrc .

    
respondido por el zhisme 02.07.2017 - 17:00
0

En caso de que esto pueda ayudar a alguien más ...

Asegúrese de que está editando el archivo .bashrc correcto para el usuario correcto. Tuve un problema similar con Vagrant. Después de ejecutar el archivo vagrant ssh , no se estaba ejecutando mi archivo .bashrc . La solución fue simple, ya que pensé que vagrant estaba iniciando sesión con el usuario llamado vagrant, y en realidad estaba iniciando sesión como otro usuario. Así que estaba editando el archivo .bashrc incorrecto. Después de editar el archivo .bashrc correcto, se reconocieron mis alias.

    
respondido por el Allen 09.04.2018 - 19:18
-1

Por cierto, si has activado ZSH, ¡reemplaza a bash!

Así que todos esos archivos ~/.bashrc no se cargan.

Debes configurar tus alias en ~/.zshrc en su lugar.

    
respondido por el Frédéric Adda 05.10.2018 - 11:07
-2

Para mantener el inicio de sesión de estilo OSX .profile y admitir el comportamiento de bash normal .bashrc , puede usar un archivo .bashrc si cambia entre nix normal y OSX proporcionando un enlace simbólico a su archivo .bashrc llamado %código%. Solo asegúrate de que este archivo no exista ya antes de intentarlo, pero así es como lo hago.

ln -s .bashrc .bash_profile
    
respondido por el Inkspeck 03.06.2013 - 22:08
-2

/ etc / bashrc es para perfiles globales en sistemas mac. Puede agregar: alias ls="ls -G" en la parte superior de este archivo y tu bien, todos tendrán carpetas y archivos coloreados. en el sistema para que no tenga que configurar nada adicional para cada usuario individual. También notará que junto con "sudo su -" a la raíz de usted mismo todavía tendrá archivos y carpetas coloreados sin dolores de cabeza adicionales.

Otro consejo divertido: al usar Iterm2 de mac, la importación de perfiles de color representará la coloración de los archivos y carpetas inmediatamente de acuerdo con su combinación de colores después de configurar esta opción "/ etc / bashrc".

    
respondido por el Sulayman Touray 08.09.2016 - 14:39

Lea otras preguntas en las etiquetas