Shell

24 12 2008

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.