stringtranslate.com

shell Unix

Ventanas de shell tcsh y sh en un escritorio Mac OS X Leopard [1]

Un shell Unix es un intérprete o shell de línea de comandos que proporciona una interfaz de usuario de línea de comandos para sistemas operativos similares a Unix . El shell es a la vez un lenguaje de comandos interactivo y un lenguaje de secuencias de comandos , y el sistema operativo lo utiliza para controlar la ejecución del sistema mediante secuencias de comandos de shell . [2]

Los usuarios suelen interactuar con un shell Unix utilizando un emulador de terminal ; sin embargo, la operación directa a través de conexiones de hardware en serie o Secure Shell es común para los sistemas de servidor. Todos los shells de Unix proporcionan comodines en los nombres de archivos , tuberías , aquí documentos , sustitución de comandos , variables y estructuras de control para pruebas de condiciones e iteraciones .

Concepto

Generalmente, un shell es un programa que ejecuta otros programas en respuesta a comandos de texto. Un shell sofisticado también puede cambiar el entorno en el que se ejecutan otros programas pasando variables con nombre , una lista de parámetros o una fuente de entrada.

En los sistemas operativos tipo Unix, los usuarios suelen tener muchas opciones de intérpretes de línea de comandos para sesiones interactivas. Cuando un usuario inicia sesión en el sistema de forma interactiva, se ejecuta automáticamente un programa de shell durante la sesión. El tipo de shell, que puede personalizarse para cada usuario, normalmente se almacena en el perfil del usuario, por ejemplo en el archivo passwd local o en un sistema de configuración distribuido como NIS o LDAP ; sin embargo, el usuario puede ejecutar cualquier otro shell disponible de forma interactiva.

En sistemas operativos con un sistema de ventanas , como macOS y distribuciones de Linux de escritorio , es posible que algunos usuarios nunca utilicen el shell directamente. En los sistemas Unix, el shell ha sido históricamente el lenguaje de implementación de los scripts de inicio del sistema, incluido el programa que inicia un sistema de ventanas, configura la red y muchas otras funciones esenciales. Sin embargo, algunos proveedores de sistemas han reemplazado el sistema de inicio tradicional basado en shell ( init ) con enfoques diferentes, como systemd .

Conchas tempranas

El primer shell de Unix fue el shell Thompson , sh , escrito por Ken Thompson en Bell Labs y distribuido con las versiones 1 a 6 de Unix, de 1971 a 1975. [3] Aunque rudimentario para los estándares modernos, introdujo muchas de las características básicas comunes a todos los shells de Unix posteriores, incluidas tuberías, estructuras de control simples que usan ify gotoy comodines en el nombre de archivo. Aunque no se utiliza actualmente, todavía está disponible como parte de algunos sistemas UNIX antiguos .

Fue modelado a partir del shell Multics , desarrollado en 1965 por la ingeniera de software estadounidense Glenda Schroeder . El shell Multics de Schroeder fue modelado a partir del programa RUNCOM que Louis Pouzin mostró al equipo Multics. El sufijo "rc" en algunos archivos de configuración de Unix (por ejemplo, ".vimrc") es un remanente de la ascendencia RUNCOM de los shells de Unix. [1] [4]

El shell PWB o shell Mashey, sh , era una versión compatible hacia arriba del shell Thompson, aumentada por John Mashey y otros y distribuida con Programmer's Workbench UNIX , alrededor de 1975-1977. Se centró en hacer práctica la programación de shell, especialmente en grandes centros informáticos compartidos. Agregó variables de shell (precursoras de las variables de entorno , incluido el mecanismo de ruta de búsqueda que evolucionó a $PATH), scripts de shell ejecutables por el usuario y manejo de interrupciones. Las estructuras de control se extendieron de if/goto a if/then/else/endif, switch/breaksw/endsw y while/end/break/continue. A medida que la programación del shell se generalizó, estos comandos externos se incorporaron al propio shell para mejorar el rendimiento.

Pero los más ampliamente distribuidos e influyentes de los primeros shells de Unix fueron el shell Bourne y el shell C. Ambos shells se han utilizado como base de codificación y modelo para muchos shells derivados y funcionales con conjuntos de características ampliadas. [5]

concha de bourne

El shell Bourne , sh , era un nuevo shell Unix creado por Stephen Bourne en Bell Labs. [6] Distribuido como shell para UNIX Versión 7 en 1979, introdujo el resto de las características básicas consideradas comunes a todos los shells de Unix posteriores, incluidos documentos , sustitución de comandos , variables más genéricas y estructuras de control integradas más extensas . El lenguaje, incluido el uso de una palabra clave invertida para marcar el final de un bloque, fue influenciado por ALGOL 68 . [7] Tradicionalmente, el nombre del programa Bourne Shell es sh y su ruta en la jerarquía del sistema de archivos Unix es /bin/sh . Pero también están disponibles varios dispositivos similares compatibles con varias mejoras y características adicionales. En muchos sistemas, sh puede ser un enlace simbólico o un enlace físico a una de estas alternativas:

El estándar POSIX especifica su shell estándar como un subconjunto estricto del shell Korn , una versión mejorada del shell Bourne. Desde la perspectiva del usuario, el shell Bourne se reconocía inmediatamente cuando estaba activo por su característico carácter predeterminado de línea de comando, el signo de dólar ( $ ).

caparazón C

El shell C , csh , se modeló sobre el lenguaje de programación C, incluidas las estructuras de control y la gramática de expresiones. Fue escrito por Bill Joy cuando era estudiante de posgrado en la Universidad de California, Berkeley , y se distribuyó ampliamente con BSD Unix . [9] [ se necesita una mejor fuente ]

El shell C también introdujo muchas características para el trabajo interactivo, incluido el historial y los mecanismos de edición , alias , pilas de directorios , notación de tilde , cdpath , control de trabajos y hash de rutas . En muchos sistemas, csh puede ser un enlace simbólico o un enlace físico al shell TENEX C (tcsh), una versión mejorada de la versión original de Joy. Aunque las características interactivas de csh se han copiado a la mayoría de los demás shells, la estructura del lenguaje no se ha copiado ampliamente. El único que funciona de manera similar es el shell Hamilton C , escrito por Nicole Hamilton, distribuido por primera vez en OS/2 en 1988 y en Windows desde 1992. [10]

Archivos de configuración

Los shells leen archivos de configuración en diversas circunstancias. Estos archivos suelen contener comandos para el shell y se ejecutan cuando se cargan; generalmente se usan para establecer variables importantes que se usan para buscar ejecutables, como $PATH y otros que controlan el comportamiento y la apariencia del shell. La tabla de esta sección muestra los archivos de configuración para shells populares. [11]

Explicación:

  1. ^ sólo si no se encuentra ~/.tcshrc
  2. ^ Solo versiones más nuevas de Bourne Shell
  3. ^ Disponible en sistemas que admiten la "opción Utilidades de portabilidad del usuario"; El valor de la variable debe ser una ruta absoluta y se ignora "si los ID de usuario reales y efectivos o los ID de grupo reales y efectivos son diferentes". [13]
  4. ^ $ENV es $HOME/.shrc en versiones más recientes de Bourne Shell
  5. ^ El mismo comportamiento que sh , pero solo si se invoca como sh (bash 2+) o, desde bash 4.2, también si se invoca explícitamente en el modo de compatibilidad POSIX (con opciones --posix o -o posix ). [14]
  6. ^ ab Solo en modo de compatibilidad sh/ksh (cuando se invoca como bash, sh, ksh)
  7. ^ abc El primer archivo legible en orden ~/.bash_profile , ~/.bash_login y ~/.profile ; y solo ~/.profile si se invoca como sh o, al menos a partir de Bash 4.2, si se invoca explícitamente en modo de compatibilidad POSIX (con opciones --posix o -o posix )

Otras conchas

Las variaciones en el concepto de shell Unix que no se derivan del shell Bourne o del shell C incluyen las siguientes: [15]

Ver también

Referencias

  1. ^ ab Tom Van Vleck (5 de febrero de 1995). "Unix y Multics". Multicians.org . Consultado el 14 de agosto de 2012 .
  2. ^ Bourne, Stephen R. (octubre de 1983). "El caparazón de Unix". BYTE . pag. 187 . Consultado el 30 de enero de 2015 .
  3. ^ "Puerto V6 Thompson Shell - Historia". V6shell.org . Consultado el 14 de agosto de 2012 .
  4. ^ Luis Pouzin (25 de noviembre de 2000). "El origen de la concha". Multicians.org . Consultado el 14 de agosto de 2012 .
  5. ^ Nikolai Bezroukov (13 de agosto de 2015). "Introducción a la historia del shell de Unix". Panorama suave. Archivado desde el original el 8 de junio de 2022 . Consultado el 21 de agosto de 2016 .
  6. ^ Bourne, Stephen (5 de marzo de 2009). "La AZ de los lenguajes de programación: Bourne shell o sh" (Entrevista). Entrevistado por Howard Dahdah. Mundo de la informática . Consultado el 16 de agosto de 2022 .
  7. ^ "Re: Revisión de los tardíos" . Consultado el 20 de septiembre de 2014 .
  8. ^ Korn, David G. (26 de octubre de 1994), "ksh - An Extensible High Level Language", Actas del Simposio de lenguajes de muy alto nivel USENIX 1994 , Asociación USENIX , consultado el 5 de febrero de 2015 , en lugar de inventar un nuevo lenguaje de escritura , creamos un sistema de entrada de formularios modificando el shell Bourne y agregando comandos integrados según fuera necesario.
  9. ^ Harley Hahn, Guía de Harley Hahn para Unix y Linux: cronología de Unix/Linux.
  10. ^ "Shell Hamilton C para notas de la versión 4.0 de Windows" . Consultado el 20 de septiembre de 2014 .
  11. ^ "Diferentes shells UNIX". unixnote.com. 2010. Archivado desde el original el 3 de abril de 2016 . Consultado el 21 de agosto de 2016 .
  12. ^ SCO Unix Group, documentación de SCO Unixware 7, 22 de abril de 2004, consultado el 18 de octubre de 2012.
  13. ^ "Lenguaje de comando de Shell". opengroup.org . Consultado el 15 de junio de 2015 .
  14. ^ "Manual de referencia de Bash: archivos de inicio de Bash". gnu.org . Consultado el 15 de junio de 2015 .
  15. ^ "Puertos FreeBSD: Shells". Freebsd.org. 2014-03-30. Archivado desde el original el 12 de enero de 2021 . Consultado el 5 de abril de 2014 .