La shell es el intérprete de comandos entre el usuario y el sistema operativo. Nos aporta lo siguiente:
- Interfaz de usuario al SO: canal de comunicación al kernel.
- Entorno para la ejecución de otros programas.
- Permite lanzar y manejar comandos y programas para un entorno.
- Un lenguaje de programación.
Todas las shell comparten algunos conceptos:
- Corren como programas de usuario.
- Pueden usarse de forma interactiva por el usuario o de manera no interactiva por el sistema.
- Puede lanzarse una shell desde otra. La nueva shell tendrá la shell original como proceso padre.
- Las shell usan archivos de configuración para establecer su entorno.
- Las shell pasan las variables de entorno a los procesos hijo.
Bash es una de las shell más populares y es el intérprete predeterminado en muchos sistemas GNU/Linux. El entorno se compone de una serie de variables, cuyos valores son usados por programas y otras shell.
Existen dos tipos:
1) Las variables de entorno: se pueden entender como variables globales, pues se pasan a todos los procesos arrancados desde la shell, incluyendo otras shell. Ej: PATH: lista los directorios donde la shell busca los comandos introducidos.
2) Shell variables: se pueden pensar como locales, porqué son específicas a la shell actual y los procesos hijo no las heredan. Para permitir que una variable local pueda ser usada por procesos hijo, debe exportarse con el comando export.
Alias
En bash se pueden fijar alias para comandos habituales o secuencias de comandos. Ex: alias more=’less’
Functions
También se pueden declarar funciones para ejecutar varias instrucciones. La sintaxis es: name ( ) { lista_de_comandos; }.
Archivos de configuración
Los usuarios pueden definir alias, funciones y variables de entorno, y para evitar introducirlos cada vez, bash usa varios archivos para preparar el entorno:
| Archivo | Descripción |
|---|---|
| /etc/profile | Archivo que contiene la variables de entorno globales a todos los usuarios, incluyendo el PATH, y programas de inicio. Ejecutado cada vez que el usuario entra al sistema. |
| ~/.bash_profile | SI existe este archivo, se ejecuta automáticamente después de /etc/profile durante el login. |
| ~/.bash_login | SI .bash_profile no existe, se ejecuta automáticamente durante el login. |
| ~/.profile | Si no existe .bash_profile, ni .bash_login, este es el archivo que se ejecuta. |
| /etc/bashrc | Funciones y alias disponibles para todos los usuarios. |
| ~/.bashrc | Alias y funciones específicas del usuario. Se ejecuta automáticamente cuando arranca bash. Incluyendo el login, y todas las invocaciones interactivas o no interactivas. |
| ~/.bash_logout | Ejecutado automáticamente en el logout. |
| ~/.inputrc | Contiene atajos de teclado del usuario. Los valores globales se establecen en /etc/inputrc. |
Nota: /etc/profile se ejecuta cada vez que iniciamos sesión, y .bashrc cada vez que se ejecuta el bash.