Articulo de referencia

KornShell

{{Cite newsgroup\n | author = Ron Gomes\n | title = Toronto USENIX Conference Schedule (tentative)\n | date = Jun 9, 1983\n | newsgroup = net.usenix\n | url = http://groups.goog...

KornShell ( ksh) es un intérprete de comandos de Unix desarrollado por David Korn en Bell Labs a principios de la década de 1980 y anunciado en USENIX el 14 de julio de 1983. [ 1 ] [ 2 ] El desarrollo inicial se basó en el código fuente del intérprete de comandos Bourne . [ 7 ] Otros colaboradores iniciales fueron los desarrolladores de Bell Labs Mike Veach y Pat Sullivan, quienes escribieron el código de los modos de edición de línea estilo Emacs y vi , respectivamente. [ 8 ] KornShell es retrocompatible con el intérprete de comandos Bourne e incluye muchas características del intérprete de comandos C , inspiradas en las solicitudes de los usuarios de Bell Labs.

Características

KornShell cumple con POSIX.2 , Shell y utilidades, intérprete de comandos (IEEE Std 1003.2-1992). Las principales diferencias entre KornShell y el tradicional intérprete de comandos Bourne incluyen:

  • El control de trabajos , el alias de comandos y el historial de comandos se diseñaron a partir de las características correspondientes del shell C ; el control de trabajos se agregó al Bourne Shell en 1989 [ 9 ].
  • una selección de tres estilos de edición de línea de comandos basados ​​en vi , Emacs y Gosling Emacs.
  • Matrices asociativas y operaciones aritméticas de punto flotante integradas (solo disponibles en la versión ksh93 de KornShell)
  • búsqueda dinámica de funciones
  • funciones matemáticas
  • Sustitución de procesos y redirección de procesos
  • expresiones similares al lenguaje C
  • Bucles for y while mejorados orientados a expresiones
  • Extensibilidad dinámica de comandos integrados (cargados dinámicamente) (desde ksh93 )
  • variables de referencia
  • variables anidadas jerárquicamente
  • Las variables pueden tener funciones miembro asociadas.
  • programación orientada a objetos (desde ksh93t )
    • Las variables pueden ser objetos con variables miembro (subvariables) y métodos miembro.
    • Los métodos de objeto se llaman con el nombre de la variable del objeto seguido (después de un punto) por el nombre del método.
    • Los métodos especiales de objeto se llaman en: inicialización o asignación de objeto, abandono de objeto ( unset ).
    • Está disponible la composición y la agregación, así como una forma de herencia.

Historia

KornShell se distribuyó inicialmente como parte del paquete de herramientas experimentales de AT&T en 1986, y posteriormente se incluyó en UNIX System V Release 4 en 1989.

Korn Shell ejecutándose en Windows Services para UNIX

KornShell era originalmente un software propietario . En 2000, el código fuente se publicó bajo una licencia particular de AT&T, pero desde el lanzamiento de ksh93q a principios de 2005, se ha licenciado bajo la Licencia Pública de Eclipse . [ 4 ] KornShell está disponible como parte de la Colección de Software de Código Abierto de AT&T Software Technology (AST). Como KornShell inicialmente solo estaba disponible a través de una licencia propietaria de AT&T, se crearon varias alternativas gratuitas y de código abierto. Estas incluyen pdksh , mksh , Bash y Z shell .

La funcionalidad del KornShell original, ksh88 , se utilizó como base para el estándar POSIX.2 , Shell and Utilities, Command Interpreter (IEEE Std 1003.2-1992).

Algunos proveedores aún envían sus propias versiones de la variante antigua ksh88 , a veces con extensiones. ksh93 se mantiene en GitHub . [ 10 ]

Como "Desktop KornShell" ( dtksh ), ksh93 se distribuye como parte del Entorno de Escritorio Común . [ 11 ] Esta versión también proporciona asignaciones a nivel de shell para widgets de Motif . Fue concebida como un competidor de Tcl / Tk . [ 12 ]

El KornShell original, ksh88 , se convirtió en el shell predeterminado en AIX en la versión 4, [ 13 ] [ 14 ] con ksh93 disponible por separado. [ 15 ]

UnixWare 7 incluye tanto ksh88 como ksh93 . El shell Korn predeterminado es ksh93 , que se proporciona como /usr/bin/ksh , y la versión anterior está disponible como /usr/bin/ksh88 . [ 16 ] UnixWare también incluye dtksh cuando se instala CDE .

La distribución ksh93 tuvo un destino menos estable después de que los autores dejaron AT&T alrededor de 2012 en la versión estable ksh93u+ . Los autores principales continuaron trabajando en una rama beta ksh93v- hasta alrededor de 2014. Ese trabajo finalmente fue asumido principalmente por Red Hat en 2017 (debido a las solicitudes de los clientes) y resultó en el lanzamiento inicial de ksh2020 [ 17 ] en el otoño de 2019. Ese lanzamiento inicial (aunque solucionó varios problemas de estabilidad anteriores) introdujo problemas de incompatibilidad y roturas. [ 18 ] En marzo de 2020, AT&T decidió revertir los cambios de la comunidad, almacenarlos en una rama y reiniciar desde ksh93u+ , ya que los cambios eran demasiado amplios y demasiado centrados en ksh para que la empresa los absorbiera en un proyecto en modo de mantenimiento. [ 19 ] [ 20 ] ksh2020 [ 21 ] fue lanzado como una "versión importante por varias razones" [ 22 ] como la eliminación del soporte EBCDIC , la eliminación del soporte para complementos binarios escritos para ksh93u+ y la eliminación de algunas funciones matemáticas defectuosas, pero nunca ha sido mantenido ni respaldado por AT&T (ni siquiera en su fecha de lanzamiento inicial). El código fuente de ksh2020 no ha recibido confirmaciones desde febrero de 2020 y fue archivado en modo de solo lectura en octubre de 2021. [ 17 ]

Tras los problemas con la rama ksh2020 y su abandono, en mayo de 2020 se creó un nuevo repositorio para la rama ksh93u+m , basado en la última versión estable de AT&T ( ksh93u+ 2012-08-01), donde el desarrollo de corrección de errores continúa activamente. [ 23 ]

Contribuciones principales a la rama principal del software

Para los fines de las listas a continuación, la rama principal del software KSH se define como el programa original, que data de julio de 1983, hasta el lanzamiento de KSH2020 a finales de 2019. El desarrollo continuo de versiones posteriores (ramas) de KSH se ha dividido en diferentes grupos a partir de 2020 y no se detalla a continuación.

Principales contribuyentes individuales

A continuación se enumeran sus contribuciones en orden cronológico aproximadamente ascendente:

  • David G. Korn (AT&T Bell Laboratories, AT&T Laboratories y Google; y creador)
  • Glenn S. Fowler (Laboratorios Bell de AT&T, Laboratorios AT&T)
  • Kiem-Phong Vo (Laboratorios Bell de AT&T, Laboratorios AT&T)
  • Adam Edgar (AT&T Bell Laboratories)
  • Michael T. Veach (AT&T Bell Laboratories)
  • Patrick D. Sullivan (Laboratorios Bell de AT&T)
  • Matthijs N. Melchior (AT&T Network Systems International)
  • Karsten-Fleischer (Ingeniería de software Omnium)
  • Boyer-Moore
  • Siteshwar Vashisht (Sombrero Rojo)
  • Kurtis Rader

Consultor de integración

  • Roland Mainz

Principales contribuyentes corporativos

A continuación se enumeran sus contribuciones en orden cronológico aproximadamente ascendente:

Recursos corporativos donados

Además de las principales corporaciones contribuyentes (mencionadas anteriormente), algunas empresas han aportado recursos gratuitos para el desarrollo de KSH. Estas se enumeran a continuación (en orden alfabético):

Variantes

Existen varias bifurcaciones y clones de KornShell:

  • dtksh  : una bifurcación de ksh93 incluida como parte de CDE .
  • tksh  : una bifurcación de ksh93 que proporciona acceso al conjunto de herramientas de widgets Tk .
  • oksh  – una adaptación de la variante de KornShell de OpenBSD , diseñada para ser lo más portable posible [ 24 ] entre sistemas operativos. Se utilizó como intérprete de comandos predeterminado en DeLi Linux 7.2.
  • loksh  – una versión para Linux de la variante de KornShell de OpenBSD , con cambios mínimos. [ 25 ]
  • mksh  – una implementación libre del lenguaje KornShell, derivada de OpenBSD pdksh . Fue desarrollada originalmente para MirOS BSD y tiene una licencia permisiva (aunque no de dominio público); específicamente, la Licencia MirOS . [ 6 ] Además de su uso en BSD, esta variante ha reemplazado a pdksh en Debian, [ 26 ] y es el intérprete de comandos predeterminado en Android. [ 27 ]
  • SKsh  : una variante de AmigaOS que proporciona varias características específicas de Amiga, como la interoperabilidad con ARexx . [ 28 ] En esta tradición, MorphOS utiliza pdksh en su SDK.
  • MKS Korn shell de MKS Inc.  – una implementación propietaria del lenguaje KornShell de Microsoft Windows Services for UNIX (SFU) hasta la versión 2.0; según David Korn, MKS Korn shell no era totalmente compatible con KornShell en 1998. [ 29 ] [ 30 ] En la versión 3.0 de SFU, Microsoft reemplazó MKS Korn shell con un nuevo shell compatible con POSIX.2 como parte de Interix . [ 31 ]
  • KornShell está incluido en UWIN , un paquete de compatibilidad con Unix creado por David Korn. [ 32 ]
  • El script /bin/sh del paquete System V sobre BSD de Doug Gwyn (US Army BRL) incluía la versión de Ron Natalie del script /bin/sh de SVR2 , que permitía tanto el control de trabajos como la edición de la línea de comandos. Este script era contemporáneo del ksh original , cuando aún no había salido de AT&T. Posteriormente, este fue el script /bin/sh que se incluyó en todos los sistemas derivados de Mach de la CMU. [ 33 ]

Véase también

Referencias

  1. 1 2 Ron Gomes (9 de junio de 1983). "Programa de la Conferencia USENIX de Toronto (tentativo)" . Grupo de noticias : net.usenix . Consultado el 29 de diciembre de 2010 . 
  2. 1 2 Guy Harris (10 de octubre de 1983). "Pregunta sobre csh" . Grupo de noticias : net.flame . Consultado el 29 de diciembre de 2010 . 
  3. "Korn Shell Launcher para Windows Subsystem for Linux « Musings" . blog.fpmurphy.com . Consultado el 29/01/2021 . 
  4. 1 2 "paquete ast-open" . AT&T Research. nd Archivado del original el 1 de octubre de 2015. Recuperado el 19 de diciembre de 2022 .
  5. 1 2 "MirBSD Korn Shell" . Mirbsd.org . Consultado el 10 de diciembre de 2018 .
  6. Korn, David G. (26 de octubre de 1994), "ksh - Un lenguaje de alto nivel extensible" , 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 script, construimos un sistema de entrada de formularios modificando el shell Bourne, agregando comandos integrados según fuera necesario.
  7. Bolsky, Morris I.; Korn, David G. (1989). «Agradecimientos». El lenguaje de comandos y programación KornShell . Englewood Cliffs, NJ: Prentice Hall. págs. xii. ISBN  0-13-516972-0.
  8. "Familia tradicional de conchas Bourne / historia y desarrollo" . In-ulm.de . Consultado el 10 de diciembre de 2018 .
  9. "Este es el sitio de descarga de software AST de AT&T Software Technology de AT&T Research. La colección de software de código abierto AST de AT&T ofrece una descripción general y software UNIX práctico y reutilizable." Github.com . 10 de diciembre de 2018. Consultado el 10 de diciembre de 2018 .
  10. Bill Rosenblatt; Arnold Robbins (2002). Aprendiendo la concha de Korn (2.ª ed.). O'Reilly. págs. viii– ix. ISBN   978-0-596-00195-7.
  11. Pendergrast, J. Stephen (1995). Programación gráfica de escritorio KornShell . Addison-Wesley. pág. 359. ISBN  978-0-201-63375-7.
  12. Casey Cannon; Scott Trent; Carolyn Jones (1999). Simply AIX 4.3 . Prentice Hall. pág. 21. ISBN  978-0-13-021344-0.
  13. "Centro de conocimiento de IBM" . IBM . Consultado el 10 de diciembre de 2018 .
  14. "Centro de conocimiento de IBM" . IBM . Consultado el 10 de diciembre de 2018 .
  15. "Conformidad con UNIX95" . Uw714doc.sco.com . Consultado el 10 de diciembre de 2018 .
  16. 1 2 "ksh2020" . GitHub . 26 de febrero de 2021.
  17. "ksh2020 changelog" . GitHub . 29 de mayo de 2020.
  18. "Rebobinando este repositorio y animando a la comunidad · Problema n.º 1466 · att/ast" . GitHub .
  19. "segfault with extended globs · #1464 · att/ast" . GitHub .
  20. "2020.0.0: Versión estable de ksh-2020.0.0" . GitHub . Consultado el 29/01/2021 . Nota: ksh2020 no recibe mantenimiento ni soporte.
  21. "ksh 2020.0.0 CHANGELOG" . GitHub . 2021-01-29.
  22. "ksh 93u+m " . GitHub . 17 de noviembre de 2021.
  23. "oksh en GitHub" . GitHub . 1 de agosto de 2020.
  24. "loksh en GitHub" . GitHub . 15 de octubre de 2021.
  25. "5.11. La transición de PDKSH a MKSH" . Archivado del original el 28 de julio de 2014. Consultado el 28 de julio de 2014 .
  26. "El shell y las utilidades de Android" . android.googlesource.com . Consultado el 27 de junio de 2025 .
  27. "Aminet - util/Shell/SKsh21.LZH" .
  28. "David Korn lo cuenta todo" . Slashdot. 7 de febrero de 2001. Consultado el 22 de octubre de 2009 .
  29. "Jerry Feldman — Asistente a la conferencia USENIX NT/LISA NT" . Lists.blu.org. 29 de agosto de 1998. Consultado el 22 de octubre de 2009 . 
  30. "Servicios de Windows para UNIX versión 3.0" . Technet.microsoft.com. 5 de diciembre de 2007. Consultado el 22 de octubre de 2009 .
  31. Anatole Olczak (2001). El shell Korn: manual de programación para Unix y Linux . Addison-Wesley Professional. pág. 4. ISBN  978-0-201-67523-8.
  32. Natalie, Ron (30-01-2023) ."Control de trabajos y otras diversiones en la terminal"" . De la lista de correo de TUHS ("The Unix Heritage Society"). Archivado del original el 07/07/2024 . Recuperado el 07/07/2024 . ...  El control de trabajos de Berkeley fue un truco interesante. Para nosotros en BRL, el problema era que detestaba absolutamente la sintaxis del shell C. El shell Korn aún no se había liberado de AT&T, así que pasé tiempo averiguando cómo funcionaba realmente en el shell C (no estaba muy bien documentado), principalmente por inspección, y luego lo reimplementé en el shell Bourne (estábamos usando la versión del código fuente de System V para eso). Todavía no pude lograr que en BRL se aceptara el uso del shell Bourne porque para entonces, tcsh ya había salido con edición de línea de comandos. Así que volví a las fuentes del shell. Para entonces, había salido 5R2, así que tomé el código fuente del shell de [ sic ] eso. [...] Reelaboré la edición de línea de comandos tipo Emacs en el shell. Posteriormente, tuve una buena conversación con David Korn en USENIX, siendo probablemente en ese momento los dos más familiarizados con los internos del control de trabajos de Bourne shell. También me senté con los chicos que escribían bash o pdksh (no recuerdo cuál) y les expliqué cómo funcionaba todo esto[ sic ].  ...  Años después, dejé el BRL, pasé tres años como administrador de Rutgers y trabajaba para una pequeña empresa emergente en Virginia. Había una estación de trabajo MIPS allí. Estaba trabajando arduamente usando ed...  Sin pensarlo, intenté recuperar un trabajo en segundo plano escribiendo "fg". Para mi sorpresa, el shell imprimió "Control de trabajos no habilitado". Hmm, digo. Eso suena como mi mensaje de error. "set -J" escribo. "Control de trabajos habilitado". ¡Oye! Este es mi shell. Resulta que Doug Gwyn puso mis modificaciones en su cinta de distribución "System V on BSD" y se había abierto camino en la base de código de Mach y así todos los sistemas derivados de Mach terminaron con él.

Lecturas adicionales

  • Morris I. Bolsky; David G. Korn (1995). El nuevo lenguaje de programación y comandos KornShell . Prentice Hall PTR. ISBN 978-0-13-182700-4.
  • David G. Korn; Charles J. Northrup; Jeffery Korn (30 de julio de 1996). "El nuevo KornShell: ksh93" . Linux Journal (27). Archivado del original el 20 de abril de 2005.