Tipos de intérpretes de órdenes en Linux

 Como se ha comentado en una entrada anterior, un intérprete de órdenes ("shell", en inglés), o intérprete de comandos, es el programa informático que provee una interfaz de usuario para acceder a los servicios del sistema operativo.
  En general, los intérpretes de comandos se dividen dependiendo del tipo de interfaz que utilicen:
  •   Línea de comandos [“Command-Line Interface” (“CLI”), en inglés]: Es la interfaz más básica, y suele ser la más potente. Puede emplearse interactivamente, escribiendo instrucciones en alguna especie de entrada de texto, o bien utilizarse de una forma mucho más automatizada, leyendo órdenes desde un archivo de guiones.
  •   Gráfica [“Graphical User Interface” (“GUI”), en inglés]: La más utilizada en la mayoría de los sistemas operativos. Aunque es algo menos potente que la anterior, suele ser más intuitiva y cómoda para la mayoría de los usuarios. Ofrece una estética mejorada y una mayor simplificación, a costa de un mayor consumo de recursos computacionales, y, en general, de una reducción de la funcionalidad alcanzable; asimismo aparece el problema de una mayor vulnerabilidad dada su complejidad.
  •   Lenguaje natural [“Natural User Interface” (NUI”), en inglés]: Se interactúa con un sistema, aplicación, etcétera, sin utilizar sistemas de mando o dispositivos de entrada, y en su lugar, se hace uso de movimientos gestuales del cuerpo o de alguna de sus partes tales como las manos (o el propio habla), sirviendo de mando de control
  En la presente bitácora ya se ha hablado de los diferentes entornos de escritorio de Linux, por lo que en esta entrada se tratarán los intérpretes de comandos para línea de comandos más relevantes en este sistema operativo.

BOURNE

  Conocido como “sh”, incorpora características tales como control de procesos, redirección de entrada/salida, listado y lectura de ficheros, protección, comunicaciones y un lenguaje de órdenes para escribir programas por lotes. Fue el intérprete usado en las primeras versiones de Unix y se convirtió en un estándar de facto.
  Todos los sistemas de tipo Unix tienen, al menos, un intérprete compatible con el intérprete Bourne. El programa Intérprete de comandos Bourne se encuentra dentro de la jerarquía de archivos de Unix en "/bin/sh". En algunos sistemas, tal como BSD, "/bin/sh" es un intérprete Bourne o un equivalente, pero en otros sistemas, como muchas distribuciones de Linux, "/bin/sh" es un enlace simbólico a un intérprete de órdenes compatible con más características.
  Los principales objetivos de este intérprete de órdenes eran aprovechar dos nuevas características clave del núcleo de la versión 7 de Unix:
  •   Listas de parámetros/argumentos para los programas mucho más largas: Su límite se había extendido de 127 a 8192 bytes.
  •   Variables de entorno: Permitían pasar mucha información a los programas al ejecutarlos.

BOURNE-AGAIN

  Popularmente conocido como Bash, fue originalmente escrito para el sistema operativo GNU, y pretendía ser el reemplazo de soporte lógico libre del intérprete Bourne. Se ha utilizado ampliamente como el intérprete de inicio de sesión predeterminado para la mayoría de las distribuciones de GNU/Linux, y también de Mac OS X de Apple hasta la versión 10.15.​ Una versión también está disponible para Windows 10 y Android. También es el intérprete de órdenes de usuario predeterminado en Solaris.
  Al igual que todos los intérpretes de Unix, es compatible con el agrupamiento de nombres de archivo (coincidencia de comodines), tuberías, documentos aquí (“here documents”, en inglés; forma de representar cadenas en los lenguajes de programación en los sistemas operativos basados en UNIX), sustitución de comandos, variables y estructuras de control para pruebas de condición e iteración. Las palabras reservadas, la sintaxis, las variables de ámbito dinámico y otras características básicas del lenguaje se copian de “sh”. Otras características, por ejemplo, el historial, se copian de “csh” y “ksh”. Bash es un intérprete de órdenes compatible con POSIX (norma escrita por la IEEE, que define una interfaz estándar del sistema operativo y el entorno, incluyendo un intérprete de comandos), pero con varias extensiones.

C

  Es más conocido como "csh", y como todo intérprete de comandos de Unix soporta comodines y tuberías para referirse a los nombres de ficheros, sustitución de comandos, variables, condicionales e interacción. Lo que diferenciaba este intérprete de órdenes de otros fueron sus características interactivas y el estilo general. Las nuevas características lo hicieron más fácil y rápido de usar, también destacaba el lenguaje de comandos similar al lenguaje de programación C.
  Con el fin de hacerlo más interactivo, se introdujeron nuevas características que lo hizo más fácil, rápido y más amigable para escribir comandos en la terminal. Los usuarios podían realizar tareas con menos pulsaciones de teclas y ejecutaban más rápido. La característica nueva más significativa fue el historial (permite a los usuarios recordar comandos y volver a ejecutarlos haciendo algunas pulsaciones de teclas rápidas) y el mecanismo de edición (funciona tanto para un comando anterior como en la sustitución de variables) de alias (permiten abreviar un conjunto de comandos y expresiones dentro de una palabra clave definida por el usuario, la cual el intérprete C expande y ejecuta; para situaciones simples los alias se ejecutan más rápido y son más convenientes que los guiones), directorios (permite al usuario empujar o abrir el directorio de trabajo actual, facilitando el salto hacía adelante o hacía atrás entre distintos lugares del sistema de archivos), notación de tilde (ofrece un forma abreviada de especificar las rutas relativas al directorio "home" usando el carácter "~"), cdpath (extiende la noción de ruta de búsqueda del comando cd; si el directorio especificado al comando cd no está en el directorio actual, csh intentará encontrarlo en los directorios almacenados en cdpath), control de procesos (permitió al usuario suspender la actividad actual y crear una nueva instancia de intérprete C, denominada "proceso"; pulsando "Ctrl + Z", el usuario podía cambiar entre procesos utilizando el comando fg, entonces, se decía, que el proceso actual estaba en primer plano y el resto de los procesos estaban suspendidos o en segundo plano) y path hashing [el hash de la ruta acelera la búsqueda de ejecutables en el intérprete C; en lugar de realizar una llamada al sistema de archivos por cada ruta de un directorio, esto es, uno a la vez hasta encontrar el archivo o quedarse sin posibilidades, C consultará una matriz asociativa interna que se construye al escanear la ruta de los directorios; esta tabla puede indicar al intérprete C donde encontrar el archivo (si existe) sin tener que buscar y puede ser actualizada con el comando rehash]. Estas nuevas características resultaron ser muy populares y muchas de ellas fueron copiadas por otros intérpretes de órdenes de Unix.

KORN

  Es mayoritariamente conocido como "ksh", y es compatible con versiones anteriores de Bourne;  además de incluir muchas características del intérprete C.
  Entre las principales diferencias entre éste y el intérprete Bourne tradicional se incluyen:
  •   Control de tareas, definición de alias de comandos, e historial de comandos diseñados después de las correspondientes características del intérprete de órdenes C.
  •   La opción de tres estilos de edición de línea de comandos basadas en vi, Emacs, y XEmacs.
  •   Vectores asociativos y aritmética de coma flotante integrada (solamente disponible en la versión ksh93 de este intérprete de órdenes).
  •   Extensibilidad dinámica de comandos integrados (a partir de ksh93).

TENEX C

  Comúnmente conocido como "tcsh", se trata de un intérprete C con mejoras y características (programables) como compleción automática de nombres y edición en línea de comandos entre otras tantas cualidades.
  Reemplazó a csh como el intérprete de comandos por defecto en FreeBSD, y recientemente, en Mac OS X.

Z

  Llamado "zsh", se diseñó para poder usarse interactivamente. Se le han incorporado muchas de las características principales de otros intérpretes de Unix (bash, ksh, o tcsh) y además posee características propias originales.
  macOS Catalina, adoptó este intérprete de órdenes como su intérprete predeterminado, reemplazando a Bash.
  Sus características más relevantes son:
  •   Completar la línea de comandos programable que puede ayudar al usuario a escribir tanto las opciones como los argumentos de la mayoría de los comandos utilizados, con soporte inmediato para varios cientos de órdenes.
  •   Compartir el historial entre todos los intérpretes de comandos en funcionamiento.
  •   El uso de comodines de archivos extendido permite la especificación de archivos sin necesidad de ejecutar un programa externo como find.
  •   Mejora del manejo de variables/arreglos.
  •   Edición de comandos multilínea en una sola memoria intermedia.
  •   Corrección ortográfica y relleno automático de los nombres de los comandos (y, opcionalmente, de los argumentos, que se asumen como nombres de archivo).
  •   Varios modos de compatibilidad, por ejemplo Zsh puede fingir ser un intérprete Bourne cuando se ejecuta como "/bin/sh".
  •   Los avisos temáticos, incluyendo la capacidad de poner la información del aviso en el lado derecho de la pantalla y hacer que se oculte automáticamente cuando se teclea un comando largo.
  •   Módulos cargables, que proporcionan entre otras cosas: Controles completos TCP y sockets de dominio Unix, un cliente FTP y funciones matemáticas ampliadas.
  •   El comando where incorporado. Funciona como el comando which pero muestra todas las ubicaciones en los directorios especificados en $PATH en lugar de sólo el que se utilizará.
  •   Directorios nombrados. Esto permite al usuario establecer atajos como ~mydir, que luego se comportan de la manera ~ y ~user do.

  Aguardo que la presente entrada haya sido interesante para el lector. Si es así, espero que éste la comente y/o la comparta, por favor.

No hay comentarios:

Publicar un comentario

Deje aquí su comentario, si no puede comentar, pruebe a hacerlo desde otro navegador de red u otro equipo.