Programación concurrente en Linux

# El Shell es un programa

Es shell es un programa qué básicamente ejecuta otros programas. Más adelante en el desarrollo del proyecto, tú mismo construirás un pequeño shell. El shell se ejecuta automáticamente al abrir el terminal en la interfaz gráfica, pero puedes ejecutarlo directamente en cualquier momento. Prueba a hacer:

    bash

Y, de hecho, cuando ejecutas un shell script como `crea_mi_entorno` el propio shell ejecuta un shell para interpretar el shell script.

En resumen, un shell de Linux como `bash` es un programa capaz de ejecutar programas que están en ficheros con formato ejecutable (esto significa que contiene código máquina, pero también que está organizado de acuerdo a una estructura determinada por ese formato) mediante la interpretación de órdenes en texto, incluyendo estructuras de control como `for` o `if`.

Como programadores quisiéramos conocer cuándo nos interesaría programar nuestra herramienta en el lenguaje del shell, interpretada, y cuándo en C, compilada, o si conviene una solución mixta. Por supuesto, la experiencia es fundamental para poder tomar la decisión adecuada en cada momento, pero fundamentalmente hay que tener en cuenta los siguientes hechos:

- Las herramientas que podemos usar en un programa C (secciones 2 y 3 del `man`) son más variadas y permiten una utilización más personalizada que las del shell.
- La flexibilidad en la programación (tipos de datos, control de flujo, etc) que ofrece el shell es menor que la de un lenguaje como C.
- Un programa C siempre será más eficiente, ya que se carga y ejecuta de una vez. Un shell script tiene que ser interpretado por el shell y el sistema tiene que manejar la carga de los programas en cada paso.
- Muchas de las órdenes que habitualmente manejamos con el shell no son programas sino funciones internas del shell, lo que significa que el shell no tiene que cargar código para ejecutarlas. Echa un vistazo en el `man` del `bash`, en el apartado “BUILTIN COMMANDS”.
- No hay un lenguaje shell, sino muchos, y en general no compatibles entre ellos. Es decir, un shell script está ligado no solo al sistema operativo, sino al shell concreto, lo que plantea mayores restricciones en cuanto a la compatibilidad.
- El shell permite componer programas con gran agilidad. Esto lo entenderás mucho mejor cuando llegues a la Parte 2 del curso.