¿Cuál es el propósito de .bashrc y cómo funciona?

¿Cuál es el propósito de .bashrc y cómo funciona?

Encontré el .bashrcarchivo y quiero saber su propósito/función. ¿Y cómo y cuándo se utiliza?

Respuesta1

.bashrces una fiestascript de shellque Bash se ejecuta cada vez que se inicia de forma interactiva. Inicializa una sesión de shell interactiva. Puede poner cualquier comando en ese archivo que pueda escribir en el símbolo del sistema.

Usted coloca comandos aquí para configurar el shell para usarlo en su entorno particular o para personalizar cosas según sus preferencias. Una cosa común para poner .bashrcsonaliasque quieres estar siempre disponible.

.bashrcse ejecuta encadalanzamiento de shell interactivo. Si usted dice:

$ bash ; bash ; bash

y luego golpea Ctrl-Dtres veces, .bashrcse ejecutará tres veces. Pero si dices esto en su lugar:

$ bash -c exit ; bash -c exit ; bash -c exit

entonces .bashrcno se ejecutará en absoluto, ya que -chace que la llamada Bash no sea interactiva. Lo mismo ocurre cuando ejecuta un script de shell desde un archivo.

Contraste .bash_profiley .profileque sólo se ejecutan al inicio de un nuevo shell de inicio de sesión. ( bash -l) Usted elige si un comando ingresa .bashrco no .bash_profiledependiendo de si desea que se ejecute una vez o para cada inicio del shell interactivo.

Como contraejemplo de los alias, que prefiero poner en .bashrc, querrás hacer PATHajustes en .bash_profilesu lugar, ya que estos cambios normalmente no sonidempotente:

export PATH="$PATH:/some/addition"

Si coloca eso en .bashrcsu lugar, cada vez que inicie un subshell interactivo, :/some/additionse pegará al final de la PATHparte posterior, creando trabajo adicional para el shell cuando escriba mal un comando.

Obtienes un nuevo shell Bash interactivo cada vez quedesembolsarvicon :sh, por ejemplo.

Respuesta2

El propósito de un .bashrcarchivo es proporcionar un lugar donde pueda configurar variables, funciones y alias, definir su mensaje (PS1) y definir otras configuraciones que desee usar cada vez que abra una nueva ventana de terminal.

Funciona ejecutándose cada vez que abre una nueva terminal, ventana o panel.

Uno súper mínimo podría tener lo siguiente:

export CLICOLOR=1
export LANG="en_US.UTF-8"
alias cp="cp -i"
alias ls="ls --color=auto"
export PS1="\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\$ "
export EDITOR="vim"

Eso es todo lo que realmente sabes para empezar.


Aquí está la versión "exagerada", útil para desarrolladores experimentados:

Un desarrollador experimentado suele tener mucho más.
Puedes ver el mío aquí.(imagen con resaltado de sintaxis):

HISTCONTROL=ignoreboth:erasedups HISTSIZE=100000 HISTFILESIZE=200000
ls --color=al > /dev/null 2>&1 && alias ls='ls -F --color=al' || alias ls='ls -G'
md () { [ $# = 1 ] && mkdir -p "$@" && cd "$@" || echo "Error - no directory passed!"; }
git_branch () { git branch 2> /dev/null | sed -e '/^[^*]/d' -e 's/* \(.*\)/\1/'; }
HOST='\033[02;36m\]\h'; HOST=' '$HOST
TIME='\033[01;31m\]\t \033[01;32m\]'
LOCATION=' \033[01;34m\]`pwd | sed "s#\(/[^/]\{1,\}/[^/]\{1,\}/[^/]\{1,\}/\).*\(/[^/]\{1,\}/[^/]\{1,\}\)/\{0,1\}#\1_\2#g"`'
BRANCH=' \033[00;33m\]$(git_branch)\[\033[00m\]\n\$ '
PS1=$TIME$USER$HOST$LOCATION$BRANCH
PS2='\[\033[01;36m\]>'
set -o vi # vi at command line
export EDITOR=vim
test -f ~/.bash_aliases && . $_
test -f ~/.git-completion.bash && . $_
test -s ~/.autojump/etc/profile.d/autojump && . $_
[ ${BASH_VERSINFO[0]} -ge 4 ] && shopt -s autocd
[ -f /etc/bash_completion ] && ! shopt -oq posix && . /etc/bash_completion
[ -z $TMUX ] && export TERM=xterm-256color && exec tmux
export PATH="$PATH:$HOME/.rvm/bin" # Add RVM to PATH for scripting
[[ -s "$HOME/.rvm/scripts/rvm" ]] && source "$home/.rvm/scripts/rvm"

Explicación:

-1. Configure mi archivo de historial para ignorar los duplicados y ser mucho más grande que el predeterminado.
-2. Opción de color lsdependiendo de si estás usando Linux u OSX
-3. Función " md" para crear y cd en un directorio con un comando
-4. Encuentre la rama de git actual si está en un repositorio de git y...
-5. -9. Defina un mensaje de PS1 increíble, como en <code>20:00:43 durrantm Castle2012 /hom/durrantm/Dropnot/_/rails_apps/linker master \n $ _</code>
-10. Mensaje de PS2 mejorado
-11. Establezca vi como editor en la línea de comando
-12. Establezca vi como editor predeterminado
-13. ejecutar mi .bash_aliasesarchivo si existe
-14. Ejecute mi script de finalización de pestañas de git (para controles remotos y sucursales) si existe.
-15. Ejecute autojump si existe
-16. Permita el cd sin escribir la parte del cd si la versión de bash >= 4
-17. Ejecute un script de finalización de bash si existe
-18. Utilice TMUX si está presente
-19. Agregue rvm a mi RUTA
-20. Utilice rvm si existe.

He hecho esto portátil para que funcione en cualquiera de mis máquinas Linux u OSX sin personalización; por lo tanto, se realizan una serie de pruebas de presencia antes de usar ciertas funciones y otros scripts.

Esto también hace que sea más fácil usar todo el archivo inmediatamente en una nueva máquina sin tener problemas que afecten la apertura de una nueva ventana de terminal.

RECORDATORIO: si cambia su .bashrc, asegúrese de iniciar una nueva ventana de terminal para asegurarse de que funcione ANTES de reiniciar (mejor práctica: hágalo inmediatamente después del cambio). Si alguna vez estropea su .bashrc y reinicia, ¡ES POSIBLE QUE NO PUEDA INICIAR SESIÓN! Personalmente, también creo un segundo usuario 'administrador' en máquinas personales para que, en caso de emergencia (inicio de sesión roto), pueda iniciar sesión y luego usar sudo para arreglar mi otro archivo .bashrc de inicio de sesión.

Respuesta3

Es un basharchivo de configuración.

Shells interactivos (sin inicio de sesión), luego la configuración se lee desde estos archivos:

  • $HOME/.bashrc

Para los shells de inicio de sesión, la configuración se lee desde estos archivos:

  • /etc/profile(Siempre obtenido)
  • $HOME/.bash_profile(El resto de estos archivos se revisan en orden hasta que se encuentra uno y luego no se lee ningún otro)
  • $HOME/.bash_login
  • $HOME/.profile

En la imagen siguiente se muestra una ilustración sencilla de cómo y cuándo se cargan.

Agregué un echoa mi .bashrcy.bash_profile

Shell interactivo vs shell de inicio de sesión

ver man bashpara más información

información relacionada