Acerca de .bash_profile, .bashrc, y ¿dónde debería escribirse el alias?

Posible duplicado: ¿Cuál es la diferencia entre .bashrc, .bash_profile y .environment?

Parece que si uso

alias ls='ls -F' 

dentro de .bashrc en Mac OS X, entonces el shell recién creado no tendrá ese alias. Necesito escribir bash nuevamente y ese alias estará en efecto.

Y si inicio sesión en Linux en la compañía de alojamiento, el archivo .bashrc tiene una línea de comentario que dice:

Para el shell que no es de inicio de sesión

y el archivo .bash_profile tiene un comentario que dice

para iniciar sesión shell

Entonces, ¿dónde deberían escribirse los alias? ¿Cómo es que separamos el shell de inicio de sesión y el shell que no inicia sesión?

Algunas páginas web dicen que usan .bash_aliases , pero parece que no funciona en Mac OS X.

La razón por la que separa el inicio de sesión y el shell que no inicia sesión es porque el archivo .bashrc se vuelve a cargar cada vez que inicia una nueva copia de Bash. El archivo .profile se carga solo cuando .profile sesión o usas el indicador apropiado para decirle a Bash que actúe como un shell de inicio de sesión.

Personalmente,

  • Puse mi configuración PATH en un archivo .profile (porque a veces uso otros shells);
  • Puse mis alias y funciones de Bash en mi archivo .bashrc ;
  • Puse esto

     #!/bin/bash # # CRM .bash_profile Time-stamp: "2008-12-07 19:42" # # echo "Loading ${HOME}/.bash_profile" source ~/.profile # get my PATH setup source ~/.bashrc # get my Bash aliases 

    en mi archivo .bash_profile

Ah, y la razón por la que necesita escribir bash nuevamente para obtener el nuevo alias es que Bash carga su archivo .bashrc cuando se inicia pero no lo vuelve a cargar a menos que se lo indique. Puede volver a cargar el archivo .bashrc (y no necesita un segundo shell) escribiendo

 source ~/.bashrc 

que carga el archivo .bashrc como si hubiera escrito los comandos directamente a Bash.

Visite http://mywiki.wooledge.org/DotFiles para obtener un excelente recurso sobre el tema aparte de man bash .

Resumen:

  • Usted solo ~/.profile sesión una vez, y es entonces cuando ~/.bash_profile o ~/.profile es leído y ejecutado. Como todo lo que ejecuta desde el shell de inicio de sesión hereda el entorno del shell de inicio de sesión, debe colocar todas las variables de entorno allí. Como LESS , PATH , MANPATH , MANPATH LC_* , … Para ver un ejemplo, ver: My .profile
  • Una vez que inicie sesión, puede ejecutar varios más proyectiles. Imagínese iniciar sesión, ejecutar X y en X iniciar algunas terminales con bash shells. Eso significa que su shell de inicio de sesión inició X, que heredó las variables de entorno de su shell de inicio de sesión, que inició sus terminales, que iniciaron sus shell bash no iniciados. Las variables de entorno se transmitieron en toda la cadena, por lo que sus shells que no son de inicio de sesión ya no necesitan cargarlas. Las shells que no inician sesión solo ejecutan ~/.bashrc , no /.profile o ~/.bash_profile , por esta razón exacta, por lo que allí definen todo lo que se aplica solo a bash . Eso son funciones, alias, variables bash-only como HISTSIZE (¡esto no es una variable de entorno, no lo exportas!) , Opciones de shell con set y shopt , etc. Para ver un ejemplo, ver: My .bashrc
  • Ahora, como parte de la peculiaridad de UNIX, un login-shell NO ejecuta ~/.bashrc sino solo ~/.profile o ~/.bash_profile , por lo que debe ~/.profile manualmente de este último. Me verás hacer eso en mi ~/.profile también: source ~/.bashrc .

De la página de manual de bash:

Cuando bash se invoca como un shell de inicio de sesión interactivo o como un shell no interactivo con la opción --login , primero lee y ejecuta comandos desde el archivo /etc/profile , si ese archivo existe. Después de leer ese archivo, busca ~/.bash_profile , ~/.bash_login , y ~/.profile , en ese orden, y lee y ejecuta comandos del primero que existe y que es legible. La opción --noprofile se puede usar cuando el shell se inicia para nhibernate este comportamiento.

Cuando sale un shell de inicio de sesión, bash lee y ejecuta comandos desde el archivo ~/.bash_logout , si existe.

Cuando se inicia un shell interactivo que no es un shell de inicio de sesión, bash lee y ejecuta comandos desde ~/.bashrc , si ese archivo existe. Esto puede nhibernatese al usar la opción --norc . La opción de archivo --rcfile obligará a bash a leer y ejecutar comandos desde el archivo en lugar de ~/.bashrc .

Por lo tanto, si desea obtener el mismo comportamiento para los shells de inicio de sesión y los shells interactivos que no son de inicio de sesión, debe poner todos sus comandos en .bashrc o .bash_profile , y luego tener el otro origen de archivo el primero.

.bash_profile se carga para un “shell de inicio de sesión”. No estoy seguro de lo que sería en OS X, pero en Linux que es X11 o un terminal virtual.

.bashrc se carga cada vez que ejecuta Bash. Ahí es donde debe colocar las cosas que desea cargar cada vez que abra una nueva ventana de Terminal.app.

Personalmente puse todo en .bashrc para que no tenga que reiniciar la aplicación para que los cambios entren en vigencia.

    Intereting Posts