¿Cuál es el .bashrc del archivo?

101

Los shells de Unix al comenzar leen el .bashrcarchivo y ejecutan comandos escritos en él. ¿Qué es este archivo y qué se ejecuta?

piña
fuente
2
Intente abrir el archivo en un editor de texto; está en texto plano.
Will Bickford

Respuestas:

68

En realidad, es bashespecíficamente lo que lee .bashrc(y /etc/bash.bashrc). Hay muchas conchas diferentes.

La página de manual de bash (por Brian Fox y Chet Ramey; también la página de información "Bash Startup Files" ) es la referencia autorizada:

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 inhibirse mediante el uso de la --norcopción. La --rcfileopción de archivo obligará a bash a leer y ejecutar comandos desde el archivo en lugar de ~/.bashrc.

Cuando bash se inicia de manera no interactiva, para ejecutar un script de shell, por ejemplo, busca la variable BASH_ENVen el entorno, expande su valor si aparece allí y usa el valor expandido como el nombre de un archivo para leer y ejecutar. Bash se comporta como si se ejecutara el siguiente comando:

if [ -n "$BASH_ENV" ]; then . "$BASH_ENV"; fi  

pero el valor de la PATHvariable no se usa para buscar el nombre del archivo.

El archivo es solo comandos de shell. Por lo general, se usa para cambiar mensajes, establecer variables de entorno y definir procedimientos de shell. Tradicionalmente, el archivo .profilese usa para este propósito, pero bashtiene tantas extensiones que necesita su propio archivo de inicio para los usuarios que desean poner bashismos en los archivos de inicio.

" No es un shell de inicio de sesión " significa cosas como el lanzamiento de scripts y, por lo general, las ventanas de terminal iniciadas por los administradores de ventanas. A veces configuro sistemas * nix para tener .bashrcy BASH_ENVsolo fuente .profile. Mientras no se desvíe de los comandos de shell POSIX, obtendrá la misma inicialización en cualquier shell.

Es particularmente valioso cuando shes realmente bash, lo que a veces sucede. Para hacer esto use:

. .profile

Una razón por la que todo esto es tan complejo es porque a veces las personas colocan cosas que producen resultados en archivos de inicio de shell, o establecen incondicionalmente avisos. Esto causa muchos problemas al ejecutar programas de shell y comandos de retroceso dentro de lenguajes, sin mencionar los system(3)programas en C. La forma en que se bashinicia está diseñada, creo, para tener un archivo donde la configuración de salida y solicitud esté bien y un archivo donde no lo esté. Tradicionalmente, se realizaría una prueba de tiempo de ejecución para distinguir la interactividad, por ejemplo, para verificar si el indicador está configurado.

DigitalRoss
fuente
Buena respuesta. Solo una cita: el archivo es solo comandos de shell. Por lo general, se usa para cambiar mensajes, establecer variables de entorno y definir procedimientos de shell.
smwikipedia
2
¿Alguien sabe lo que significa la parte rc de .bashrc / .zshrc?
WORMSS
44
@WORMSS: ¡Buena pregunta! No eres el único que se pregunta sobre eso .
Caleb Xu
Quizás rc significa configuración de tiempo de ejecución.
Mike Diehn el
12

Cuando se inicia Bash, ejecuta los comandos en una variedad de scripts diferentes.

Cuando se invoca Bash como un shell de inicio de sesión interactivo, primero lee y ejecuta comandos del 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 es legible.

Cuando sale un shell de inicio de sesión, Bash lee y ejecuta comandos del 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 inhibirse utilizando 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.

http://en.wikipedia.org/wiki/Bash_(Unix_shell)

Aquí hay algunos trucos y consejos:

http://www.cyberciti.biz/tips/howto-linux-unix-bash-shell-setup-prompt.html

Intentemos configurar el indicador para que pueda mostrar la fecha y el nombre de host de hoy:

PS1="\d \h $ "
randomx
fuente
1
¿Por qué es .profiledespués .bash_profile? Alguna lógica?
Pacerier
10

Debe contener varios comandos de "inicialización" para su shell, por ejemplo:

  • Crear alias útiles (por ejemplo alias ll='ls -l').
  • Agregar más directorios a la RUTA.
  • Establecer nuevas variables de entorno.
Roman Zeyde
fuente
¿Para qué sirve el alias?
piña
2
@pineapple: un alias es una forma de ejecutar un comando, que puede ser largo, con uno más corto. Por ejemplo, el alias le ll='ls -l'permite escribir llpara ejecutar el ls -lcomando.
Wuffers