stringtranslate.com

Bash (shell Unix)

Bash es un shell y lenguaje de comandos Unix escrito por Brian Fox para el Proyecto GNU como un reemplazo de software gratuito para el shell Bourne . [15] [16] El nombre del shell es un acrónimo de Bourne-Again SHell , un juego de palabras con el nombre del shell Bourne al que reemplaza [17] y la noción de " nacer de nuevo ". [18] [19] Lanzado por primera vez en 1989, [20] se ha utilizado como shell de inicio de sesión predeterminado para la mayoría de las distribuciones de Linux y fue uno de los primeros programas que Linus Torvalds portó a Linux, junto con GCC . [21] Está disponible en casi todos los sistemas operativos modernos.

Bash es un procesador de comandos que normalmente se ejecuta en una ventana de texto donde el usuario escribe comandos que provocan acciones. Bash también puede leer y ejecutar comandos desde un archivo, llamado script de shell . Como la mayoría de los shells de Unix, admite globbing de nombres de archivos (coincidencia de comodines), tuberías , aquí documentos , sustitución de comandos , variables y estructuras de control para pruebas de condiciones e iteraciones . Las palabras clave , 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, historial , se copian de csh y ksh . Bash es un shell compatible con POSIX , pero con varias extensiones.

También hay disponible una versión para Windows 10 y Windows 11 a través del Subsistema de Windows para Linux . [22] [23] También es el shell de usuario predeterminado en Solaris 11. [24] Bash también era el shell predeterminado en BeOS , [7] y en las versiones de Apple macOS desde 10.3 (originalmente, el shell predeterminado era tcsh ) hasta 10.15 ( macOS Catalina ), que cambió el shell predeterminado a zsh , [25] aunque Bash sigue disponible como shell alternativo. [26]

A principios de septiembre de 2014 se descubrió un agujero de seguridad en Bash que data de la versión 1.03 (agosto de 1989), [27] denominado Shellshock , y rápidamente condujo a una serie de ataques en Internet . [28] [29] [30] Los parches para corregir los errores estuvieron disponibles poco después de que se identificaron los errores.

Historia

Brian Fox comenzó a codificar Bash el 10 de enero de 1988, [31] después de que Richard Stallman se sintiera insatisfecho con la falta de progreso realizado por un desarrollador anterior. [15] Stallman y la Free Software Foundation (FSF) consideraron un shell libre que pudiera ejecutar scripts de shell existentes tan estratégico para un sistema completamente libre construido a partir de código BSD y GNU que este fue uno de los pocos proyectos que financiaron ellos mismos, con Fox emprendiendo el trabajo como empleado de la FSF. [15] [32] Fox lanzó Bash como versión beta, versión .99, el 8 de junio de 1989, [20] y siguió siendo el mantenedor principal hasta algún momento entre mediados de 1992 [33] y mediados de 1994, [34] cuando fue despedido de la FSF [35] y su responsabilidad pasó a otro de los primeros contribuyentes, Chet Ramey. [36] [37] [38]

Desde entonces, Bash se ha convertido, con diferencia, en el shell más popular entre los usuarios de Linux, convirtiéndose en el shell interactivo predeterminado en las diversas distribuciones de ese sistema operativo [39] [40] (aunque el shell Almquist puede ser el shell de secuencias de comandos predeterminado) y en las versiones de macOS de Apple. antes de Catalina en octubre de 2019. [41] [42] [25] Bash también ha sido portado a Microsoft Windows y distribuido con Cygwin y MinGW , a DOS por el proyecto DJGPP , a Novell NetWare , a OpenVMS por el proyecto GNV, [43 ] a ArcaOS , [44] y a Android a través de varias aplicaciones de emulación de terminal.

En septiembre de 2014, Stéphane Chazelas, especialista en Unix/Linux, [45] descubrió un error de seguridad en el programa. El error, revelado por primera vez el 24 de septiembre, se llamó Shellshock y se le asignaron los números CVE - 2014-6271, CVE-2014-6277 y CVE-2014-7169. El error se consideró grave, ya que los scripts CGI que utilizan Bash podrían ser vulnerables, permitiendo la ejecución de código arbitrario . El error estaba relacionado con cómo Bash pasa definiciones de funciones a subcapas a través de variables de entorno . [46]

Características

La sintaxis del comando Bash es un superconjunto de la sintaxis del comando Bourne Shell. Bash admite expansión de llaves , [47] finalización de línea de comando (finalización programable), [48] depuración básica [49] [50] y manejo de señales (usando trap) desde bash 2.05a [51] [52], entre otras características. Bash puede ejecutar la gran mayoría de los scripts de shell de Bourne sin modificaciones, con la excepción de los scripts de shell de Bourne que tropiezan con un comportamiento de sintaxis marginal interpretado de manera diferente en Bash o que intentan ejecutar un comando del sistema que coincida con una nueva función integrada de Bash, etc. La sintaxis del comando de Bash incluye ideas dibujadas desde Korn Shell (ksh) y C shell (csh), como la edición de la línea de comandos, el historial de comandos ( historycommand), [53] la pila de directorios, las variables $RANDOMy $PPIDy la sintaxis de sustitución de comandos$(…) POSIX .

Cuando un usuario presiona la tecla tab dentro de un shell de comandos interactivo, Bash utiliza automáticamente la finalización de línea de comandos , desde la versión beta 2.04, [54] para hacer coincidir nombres de programas, nombres de archivos y nombres de variables parcialmente escritos. El sistema de finalización de línea de comandos de Bash es muy flexible y personalizable y, a menudo, incluye funciones que completan argumentos y nombres de archivos para programas y tareas específicos.

La sintaxis de Bash tiene muchas extensiones que faltan en el shell Bourne. Bash puede realizar cálculos con números enteros ("evaluación aritmética") sin generar procesos externos. Utiliza el ((…))comando y la $((…))sintaxis de variables para este propósito. Su sintaxis simplifica la redirección de E/S . Por ejemplo, puede redirigir la salida estándar (stdout) y el error estándar (stderr) al mismo tiempo utilizando el &>operador. Esto es más sencillo de escribir que el equivalente del shell Bourne ' command > file 2>&1'. Bash admite la sustitución de procesos utilizando la sintaxis <(command)and >(command), que sustituye la salida (o la entrada) de un comando donde normalmente se usa un nombre de archivo. (Esto se implementa a través de /proc/fd/ canalizaciones sin nombre en sistemas que lo admiten, o mediante canalizaciones con nombre temporales cuando sea necesario).

Cuando se usa la palabra clave 'función', las declaraciones de funciones de Bash no son compatibles con los scripts Bourne/Korn/POSIX (KornShell tiene el mismo problema cuando se usa 'función'), pero Bash acepta la misma sintaxis de declaración de funciones que los shells Bourne y Korn. y es compatible con POSIX. Debido a estas y otras diferencias, los scripts de shell Bash rara vez se pueden ejecutar bajo los intérpretes de shell Bourne o Korn a menos que se escriban deliberadamente teniendo en cuenta esa compatibilidad, lo cual se vuelve menos común a medida que Linux se generaliza. Pero en el modo POSIX, Bash se ajusta más a POSIX. [55]

Bash admite aquí documentos . Desde la versión 2.05b, Bash puede redirigir la entrada estándar (stdin) desde una "cadena aquí" usando el <<<operador.

Bash 3.0 admite la coincidencia de expresiones regulares durante el proceso utilizando una sintaxis que recuerda a Perl . [56]

En febrero de 2009, [57] Bash 4.0 introdujo soporte para matrices asociativas . [13] Los índices de matriz asociativa son cadenas, de manera similar a AWK o Tcl . [58] Se pueden utilizar para emular matrices multidimensionales. Bash 4 también cambia su licencia a GPL-3.0 o posterior ; Algunos usuarios sospechan que este cambio de licencia es la razón por la que MacOS sigue utilizando versiones anteriores. [59] Apple finalmente dejó de usar Bash en sus sistemas operativos como shell predeterminado con el lanzamiento de MacOS Catalina en 2019. [26]

Expansión de llaves

La expansión de llaves, también llamada alternancia , es una característica copiada del shell C. Genera un conjunto de combinaciones alternativas. Los resultados generados no necesitan existir como archivos. Los resultados de cada cadena expandida no se ordenan y se conserva el orden de izquierda a derecha:

$ echo  a { p,c,d,b } e mono ace ade abe $ echo { a,b,c }{ d,e,f } ad ae af bd be bf cd ce cf 

Los usuarios no deben utilizar expansiones de llaves en scripts de shell portátiles, porque el shell Bourne no produce el mismo resultado.

$ # bash shell $ /bin/bash  -c 'echo a{p,c,d,b}e' ape ace ade abe $ # Un shell tradicional no produce el mismo resultado $ /bin/sh -c 'echo a {p,c,d,b}e' a{p,c,d,b}e   

Cuando la expansión de llaves se combina con comodines, las llaves se expanden primero y luego los comodines resultantes se sustituyen normalmente. Por lo tanto, se puede obtener una lista de imágenes JPEG y PNG en el directorio actual usando:

es  *. { jpg,jpeg,png } # se expande a *.jpg *.jpeg *.png - después de lo cual, # se procesan los comodines echo *. { png,jp { e, } g } # echo solo muestra las expansiones - # y las llaves entre llaves son posibles.     

Además de la alternancia, la expansión de llaves se puede utilizar para rangos secuenciales entre dos números enteros o caracteres separados por puntos dobles. Las versiones más nuevas de Bash permiten que un tercer número entero especifique el incremento.

$ eco { 1 ..10 } 1 2 3 4 5 6 7 8 9 10 $ eco { 01 ..10 } 01 02 03 04 05 06 07 08 09 10 $ eco archivo { 1 ..4 } .txt archivo1.txt archivo2.txt archivo3.txt archivo4.txt $ eco { a..e } abcde $ eco { 1 ..10..3 } 1 4 7 10 $ eco { a..j..3 } adgj      

Cuando la expansión de llaves se combina con la expansión variable (también conocida como expansión de parámetros y sustitución de parámetros ), la expansión variable se realiza después de la expansión de llaves, lo que en algunos casos puede requerir el uso del evalincorporado, por lo tanto:

$ inicio = 1 ; end = 10 $ echo { $start .. $end } # no se expande debido al orden de evaluación {1..10} $ eval echo { $start .. $end } # se produce la expansión de la variable y luego se evalúa la cadena resultante 1 2 3 4 5 6 7 8 9 10      

Guiones de inicio

Cuando se inicia Bash, ejecuta los comandos en una variedad de archivos de puntos . A diferencia de los scripts de shell Bash, los archivos punto normalmente no tienen ni el permiso de ejecución habilitado ni una directiva de intérprete como #!/bin/bash.

Ejemplo de inicio de Bash compatible con versiones anteriores

El siguiente ejemplo ~/.bash_profilees compatible con el shell Bourne y proporciona una semántica similar a csh para ~/.bashrcy ~/.bash_login. Es una evaluación de cortocircuito que prueba si el nombre del archivo existe y es legible, omitiendo la parte posterior si no lo es.[ -r filename ] && cmd&&

[  -r  ~/.perfil ] && . ~/.profile # configurar el entorno, una vez, sintaxis Bourne-sh solo si [ -n " ​​$PS1 " ] ; entonces # ¿somos interactivos? [ -r ~/.bashrc ] && . ~/.bashrc # tty/prompt/configuración de funciones para shells interactivos [ -r ~/.bash_login ] && . ~/.bash_login # cualquier tarea al iniciar sesión solo para el shell de inicio de sesión fi # Fin del bloque "if"                             

Problemas del sistema operativo al iniciar Bash

Algunas versiones de Unix y Linux contienen scripts de inicio del sistema Bash, generalmente en el /etcdirectorio. Bash ejecuta estos archivos como parte de su inicialización estándar, pero otros archivos de inicio pueden leerlos en un orden diferente al de la secuencia de inicio de Bash documentada. El contenido predeterminado de los archivos del usuario root también puede tener problemas, así como los archivos estructurales que el sistema proporciona a las nuevas cuentas de usuario durante la instalación. Los scripts de inicio que inician el sistema de ventanas X también pueden hacer cosas sorprendentes con los scripts de inicio de Bash del usuario en un intento de configurar variables de entorno del usuario antes de iniciar el administrador de ventanas . Estos problemas a menudo se pueden solucionar utilizando un archivo ~/.xsessiono ~/.xprofilepara leer ~/.profile, que proporciona las variables de entorno que necesitan las ventanas de shell Bash generadas por el administrador de ventanas, como xterm o Gnome Terminal .

Portabilidad

Ver también: Principales diferencias con el Bourne Shell

Invocar a Bash con la --posixopción o indicarlo set -o posixen un script hace que Bash se ajuste muy estrechamente al estándar POSIX 1003.2 . [60] Los scripts de shell Bash destinados a la portabilidad deben tener en cuenta al menos el estándar de shell POSIX. Algunas características de bash que no se encuentran en POSIX son: [60] [61]

Si un fragmento de código utiliza dicha característica, se denomina "bashismo", un problema para el uso portátil. Se pueden utilizar Debian checkbashismsy Vidar Holen shellcheckpara asegurarse de que un script no contenga estas partes. [63] [64] La lista varía dependiendo del shell de destino real: la política de Debian permite algunas extensiones en sus scripts (como lo están en el shell del tablero ), [61] mientras que un script que intenta soportar shells Bourne anteriores a POSIX, como autoconf , están aún más limitados configureen las funciones que pueden utilizar. [sesenta y cinco]

Atajos de teclado

Bash usa GNU Readline para proporcionar atajos de teclado para editar la línea de comandos usando las combinaciones de teclas predeterminadas ( Emacs ). Los enlaces Vi se pueden habilitar ejecutando set -o vi. [66]

Gestión de procesos (Control de trabajos)

El shell Bash tiene dos modos de ejecución de comandos: por lotes (asíncrono) y concurrente (sincrónico).

Para ejecutar comandos en modo por lotes (es decir, en secuencia), deben estar separados por el carácter ";", o en líneas separadas:

comando1 ;  comando2comando3

En este ejemplo, cuando finaliza el comando1, se ejecuta el comando2 y cuando se completa el comando2, se ejecutará el comando3.

Puede ocurrir una ejecución en segundo plano del comando1 usando (símbolo &) al final de un comando de ejecución, y el proceso se ejecutará en segundo plano mientras se devuelve inmediatamente el control al shell y se permite la ejecución continua de los comandos.

comando1 & 

O para tener una ejecución concurrente de dos comando1 y comando2, se deben ejecutar en el shell Bash de la siguiente manera:

comando1 y comando2  

En este caso, comando1 se ejecuta en segundo plano y símbolo, devolviendo inmediatamente el control al shell que ejecuta comando2 en primer plano.

Se puede detener un proceso y devolver el control a bash escribiendo Ctrl+ zmientras el proceso se ejecuta en primer plano. [67]

Se puede obtener una lista de todos los procesos, tanto en segundo plano como detenidos, ejecutando jobs:

$ trabajos [1] - Ejecutando comando1 y [2]+ Comando detenido2

En el resultado, el número entre paréntesis se refiere a la identificación del trabajo. El signo más indica el proceso predeterminado para bgy fg. Los textos "En ejecución" y "Detenido" se refieren al estado del proceso . La última cadena es el comando que inició el proceso.

El estado de un proceso se puede cambiar mediante varios comandos. El fgcomando pone un proceso en primer plano, mientras bgestablece un proceso detenido ejecutándose en segundo plano. bgy fgpueden tomar una identificación de trabajo como primer argumento, para especificar el proceso sobre el cual actuar. Sin uno, utilizan el proceso predeterminado, identificado por un signo más en la salida de jobs. El killcomando se puede utilizar para finalizar un proceso prematuramente, enviándole una señal . La identificación del trabajo debe especificarse después de un signo de porcentaje:

matar  %1

Ejecución condicional

Bash proporciona separadores de comandos de "ejecución condicional" que hacen que la ejecución de un comando dependa del código de salida establecido por un comando precedente. Por ejemplo:

cd " $ EN ALGÚN LUGAR " && ./hacer_algo || echo "Ocurrió un error" > & 2       

Donde ./do_something solo se ejecuta si el comando cd (cambiar directorio) fue "exitoso" (devolvió un estado de salida de cero) y el comando echo solo se ejecutaría si el comando cd o ./do_something devuelve un "error" (estado de salida distinto de cero).

Para todos los comandos, el estado de salida se almacena en la variable especial $?. Bash también admite formas de evaluación de comandos condicionales.if ...;then ...;else ...;ficase $VARIABLE in $pattern)...;;$other_pattern)...;; esac

Informe de errores

Un comando externo llamado bashbug informa errores del shell Bash. Cuando se invoca el comando, aparece el editor predeterminado del usuario con un formulario para completar. El formulario se envía por correo a los mantenedores de Bash (u opcionalmente a otras direcciones de correo electrónico). [68] [69]

Finalización programable

Bash admite la finalización programable mediante comandos integrados complete, compopty compgen. [70] La característica ha estado disponible desde la versión beta de 2.04 lanzada en 2000. [71] [72] Estos comandos permiten una especificación de finalización compleja e inteligente para comandos (es decir, programas instalados), funciones, variables y nombres de archivos. [73]

Los comandos completey compoptdos especifican cómo se enumerarán los argumentos de algunos comandos u opciones disponibles en la entrada de la línea de lectura . A partir de la versión 5.1, la finalización del comando o la opción generalmente se activa presionando una tecla después de escribir su nombre. [73]Tab ↹

Nombre del programa

El nombre del programa es una figura retórica o una ocurrencia que comienza con un homenaje a Stephen Bourne , el creador de uno de los programas shell que en ocasiones han sido considerados reemplazados por el shell bash. Su nombre se utiliza como un juego de palabras con la imagen del parto, y con ese juego de palabras se añade una alusión al modismo cristiano de " nacer de nuevo ", o posiblemente a la idea budista de la reencarnación . A veces considerado una referencia a Juan 3 del Nuevo Testamento cristiano , Merriam-Webster define "nacido de nuevo" como "persona que ha hecho un renovado... compromiso de fe". [74] "Este modismo se usa luego para nombrar al programa: el Bourne Again SHell . [75] [76]

El acrónimo de ese nombre entonces es "bash", una palabra que significa "golpear violentamente". [77] " En el contexto de la programación informática, "golpear violentamente algo", como un teclado de computadora, podría considerarse una imagen hiperbólica de cierta frustración . Se podría considerar que estas imágenes de emocionalidad negativa están en yuxtaposición directa con la idea de "nacer de nuevo".

El nombramiento podría considerarse un ejemplo de ironía verbal o insinuación accidental . La gramática Bash se basó inicialmente en las gramáticas de los programas shell de Unix más populares que se usaban actualmente, algunos de los cuales se consideraban particularmente difíciles de usar o frustrantes en ese momento. A medida que pasaron los años, el desarrollo de bash hizo que su gramática fuera más fácil de usar, [78] [79] [80] [81] [82] [83] hasta tal punto que parece probable que el proyecto bash se haya comprometido a mejorar su usabilidad. Desde entonces, bash se ha convertido en el programa de shell predeterminado de facto en la mayoría de los sistemas operativos Linux y Unix.

Documentación

Como estándar en el que se basa bash, POSIX, o IEEE Std 1003.1™, et seq, es informativo.

La página de manual de Linux pretende ser el documento explicativo autorizado para comprender cómo funciona `bash`, mientras que el manual de GNU a veces se considera más fácil de leer. "También puede encontrar información sobre Bash ejecutando info bash... o consultando /usr/share/doc/bash/, /usr/local/share/doc/bash/o directorios similares en su sistema. Un breve resumen está disponible ejecutando bash --help. [84] "

En Linux modernos, la información sobre los comandos integrados del shell se puede encontrar ejecutando help, help [built-in name]o `man incorporados` en el indicador de terminal donde está instalado bash. Algunos comandos, como `echo`, `false`, `kill`, `printf`, `test` o `true`, dependiendo de su sistema y de su versión de bash instalada localmente, pueden hacer referencia a un shell integrado. en o un archivo ejecutable binario del sistema. Cuando ocurre una de estas colisiones de nombres de comandos, bash ejecutará de forma predeterminada una línea de comando determinada utilizando el shell integrado. Especificar la ruta absoluta de un ejecutable binario (es decir, `/bin/printf`) es una forma de garantizar que el shell utilice un binario del sistema. Este problema de colisión de nombres también afecta a los "resúmenes de ayuda" vistos con `kill --help` y `/bin/kill --help`. Los archivos ejecutables binarios integrados del shell y del sistema del mismo nombre suelen tener opciones diferentes.

"El responsable del proyecto también tiene una página Bash que incluye Preguntas frecuentes, [85] "estas preguntas frecuentes están actualizadas a partir de la versión 5.1 de Bash y ya no se actualizan.

Historial de lanzamientos

Ver también

Referencias

  1. ^ Hamilton, Naomi (30 de mayo de 2008). "La AZ de los lenguajes de programación: BASH/Bourne-Again Shell". Mundo de la informática . Archivado desde el original el 8 de noviembre de 2016 . Consultado el 1 de marzo de 2022 .
  2. ^ Ramey, Chet (20 de abril de 2021). "El GNU Bourne-Again Shell". Servicios de Infraestructura Tecnológica . Universidad Case Western Reserve . Consultado el 1 de marzo de 2022 .
  3. ^ "bash-5.2.21.tar.gz". 9 de noviembre de 2023 . Consultado el 9 de noviembre de 2023 .
  4. ^ "Preguntas frecuentes sobre Bash, versión 4.14". Archivado desde el original el 1 de septiembre de 2018 . Consultado el 9 de abril de 2016 .
  5. ^ "Falta código fuente: ¿cumplimiento de GPL? · Número 107 · Microsoft/WSL". GitHub . Archivado desde el original el 24 de septiembre de 2019 . Consultado el 8 de julio de 2016 .
  6. ^ "GNU Golpe". Softpedia . Noticias suaves. 23 de enero de 2010. Archivado desde el original el 21 de octubre de 2017 . Consultado el 9 de abril de 2016 .
  7. ^ ab "Una alternativa de escritorio". Forbes .
  8. ^ "Apéndice A: Uso del Shell de línea de comandos de BeOS". testou.free.fr .
  9. ^ "Terminal".
  10. ^ Proyecto GNU . "Archivo LÉAME". Archivado desde el original el 26 de abril de 2019 . Consultado el 16 de abril de 2014 . Bash es software gratuito, distribuido bajo los términos de la Licencia Pública General [GNU] publicada por la Free Software Foundation, versión 3 de la Licencia (o cualquier versión posterior).
  11. ^ "bash-1.11". oldlinux.org . Consulte test.c para GPL-2.0 o posterior
  12. ^ "bash-1.05.tar". oldlinux.org .
  13. ^ abc "BashFAQ/061 - Wiki de Greg". mywiki.wooledge.org . Archivado desde el original el 2 de marzo de 2021 . Consultado el 1 de marzo de 2021 .
  14. ^ "¿Hay alguna manera de descargar la fuente bash presumiblemente inicial bash-0.99?". unix.stackexchange.com .
  15. ^ abc Richard Stallman (reenviado con comentarios de Chet Ramey) (10 de febrero de 1988). "GNU + BSD =?". Grupo de noticias : comp.unix.questions. Usenet:  [email protected]. Archivado desde el original el 28 de diciembre de 2021 . Consultado el 28 de diciembre de 2021 . Durante un año y medio, el shell GNU estuvo "casi terminado". El autor hizo repetidas promesas de cumplir lo que había hecho y nunca las cumplió. Finalmente ya no podía creer que alguna vez entregaría algo. Por eso, Brian Fox, miembro del personal de la Fundación, está implementando ahora una imitación del caparazón de Bourne.
  16. ^ Hamilton, Naomi (30 de mayo de 2008), "La AZ de los lenguajes de programación: BASH/Bourne-Again Shell", Computerworld : 2, archivado desde el original el 6 de julio de 2011 , recuperado 21 de marzo de 2011 , Cuando Richard Stallman decidió Para crear un reemplazo completo para los entonces sobrecargados sistemas Unix, sabía que eventualmente tendría que tener reemplazos para todas las utilidades comunes, especialmente el shell estándar, y esos reemplazos tendrían que tener licencias aceptables.El enlace original de computerworld.com.au está inactivo: consulte también copias del material original en readthedocs.io, computerworld.com.au y la Universidad de Carolina del Sur.
  17. ^ "Casi consigo un editor y compilador de Linux". Dr. Dobb . Archivado desde el original el 2 de marzo de 2021 . Consultado el 12 de septiembre de 2020 .
  18. ^ Richard Stallman (12 de noviembre de 2010). "Acerca del Proyecto GNU". Fundación de Software Libre . Archivado desde el original el 24 de abril de 2011 . Consultado el 13 de marzo de 2011 ."Bourne Again Shell" es un juego de palabras con el nombre Bourne Shell , que era el shell habitual en Unix.
  19. ^ Gattol, Markus (13 de marzo de 2011), Bourne-again Shell, archivado desde el original el 9 de marzo de 2011 , recuperado 13 de marzo de 2011 , El nombre es un juego de palabras con el nombre de Bourne shell (sh), uno de los primeros e importante shell de Unix escrito por Stephen Bourne y distribuido con la Versión 7 de Unix alrededor de 1978, y el concepto de "nacer de nuevo".
  20. ^ ab Brian Fox (reenviado por Leonard H. Tower Jr.) (8 de junio de 1989). "¡Bash está en versión beta!". Grupo de noticias : gnu.announce. Archivado desde el original el 4 de mayo de 2013 . Consultado el 28 de octubre de 2010 .
  21. ^ Torvalds, Linus Benedict (agosto de 1991). "comp.os.minix" . Consultado el 6 de septiembre de 2009 . Actualmente he portado bash(1.08) y gcc(1.40), y todo parece funcionar.
  22. ^ "Cómo instalar la herramienta de línea de comandos Bash Shell en Windows 10". 28 de septiembre de 2016. Archivado desde el original el 20 de noviembre de 2016 . Consultado el 20 de noviembre de 2016 .
  23. ^ Hoffman, Chris (30 de julio de 2021). "Cómo instalar el subsistema de Windows para Linux en Windows 11". Cómo hacerlo geek . Consultado el 12 de octubre de 2022 .
  24. ^ "Cambios en las funciones del entorno de usuario". Oráculo. Archivado desde el original el 12 de junio de 2018 . Consultado el 8 de junio de 2018 .
  25. ^ ab Warren, Tom (4 de junio de 2019). "Apple reemplaza bash con zsh como shell predeterminado en macOS Catalina". El borde . Archivado desde el original el 10 de junio de 2019 . Consultado el 13 de junio de 2019 .
  26. ^ ab Hughes, Matthew (4 de junio de 2019). "¿Por qué macOS Catalina usa Zsh en lugar de Bash? Licencias". La próxima web . Archivado desde el original el 31 de diciembre de 2020 . Consultado el 12 de enero de 2021 .
  27. ^ Chazelas, Stéphane (4 de octubre de 2014). "Archivos de listas de correo de oss-sec". Seclistas.org . Archivado desde el original el 6 de octubre de 2014 . Consultado el 4 de octubre de 2014 .
  28. ^ Leyden, John (24 de septiembre de 2014). "Patch Bash AHORA: el error 'Shell Shock' ataca los sistemas OS X y Linux de par en par". El registro . Archivado desde el original el 16 de octubre de 2014 . Consultado el 25 de septiembre de 2014 .
  29. ^ Perlroth, Nicole (25 de septiembre de 2014). "Los expertos en seguridad esperan que el error de software 'Shellshock' en Bash sea significativo". Los New York Times . Archivado desde el original el 5 de abril de 2019 . Consultado el 25 de septiembre de 2014 .
  30. ^ Seltzer, Larry (29 de septiembre de 2014). "Shellshock hace que Heartbleed parezca insignificante". ZDNet . Archivado desde el original el 14 de mayo de 2016.
  31. ^ Brian Fox (29 de agosto de 1996), shell.c, Free Software Foundation , archivado desde el original el 28 de septiembre de 2018 , consultado el 1 de noviembre de 2010 , Fecha de nacimiento: domingo 10 de enero de 1988. Autor inicial: Brian Fox
  32. ^ Richard Stallman (3 de octubre de 2010). "Acerca del Proyecto GNU". Fundación de Software Libre . Archivado desde el original el 24 de abril de 2011 . Consultado el 21 de marzo de 2011 . Los empleados de la Free Software Foundation han escrito y mantenido varios paquetes de software GNU. Dos de ellos notables son la biblioteca C y el shell. … Financiamos el desarrollo de estos programas porque el Proyecto GNU no se trataba sólo de herramientas o un entorno de desarrollo. Nuestro objetivo era un sistema operativo completo y estos programas eran necesarios para ese objetivo.
  33. ^ len ([email protected]) (20 de abril de 1993). "Boletín de GNU de enero de 1993". Grupo de noticias : gnu.announce. Usenet:  [email protected]. Archivado desde el original el 2 de marzo de 2021 . Consultado el 28 de octubre de 2010 .
  34. ^ Ramey, Chet (1 de agosto de 1994). "Bash: el shell GNU (Reflexiones y lecciones aprendidas)". Diario de Linux . Archivado desde el original el 5 de diciembre de 2008 . Consultado el 13 de noviembre de 2008 .
  35. ^ Chet Ramey (31 de octubre de 2010), Fechas en su entrevista de Computerworld, archivado desde el original el 20 de julio de 2012 , recuperado 31 de octubre 2010
  36. ^ Chet Ramey (12 de junio de 1989). "Correcciones y mejoras de Bash 0.99". Grupo de noticias : gnu.bash.bug. Archivado desde el original el 10 de noviembre de 2012 . Consultado el 1 de noviembre de 2010 .
  37. ^ Chet Ramey (24 de julio de 1989). "Algunas correcciones de bash-1.02". Grupo de noticias : gnu.bash.bug. Archivado desde el original el 10 de noviembre de 2012 . Consultado el 30 de octubre de 2010 .
  38. ^ Brian Fox (2 de marzo de 1990). "Disponibilidad de bash 1.05". Grupo de noticias : gnu.bash.bug. Archivado desde el original el 10 de noviembre de 2012 . Consultado el 30 de octubre de 2010 .
  39. ^ Bresnahan, Christine; Blum, Richard (abril de 2015). Guía de estudio de CompTIA Linux+ con tecnología de Linux Professional Institute: examen LX0-103 y examen LX0-104 (3.ª ed.). John Wiley & Sons, Inc. pág. 5.ISBN 978-1-119-02122-3. Archivado desde el original el 2 de marzo de 2021 . Consultado el 6 de junio de 2016 . En Linux, la mayoría de los usuarios ejecutan bash porque es el shell más popular.
  40. ^ Danés, Arman; Jang, Michael (febrero de 2006). Dominar Linux. John Wiley & Sons, Inc. pág. 363.ISBN 978-0-7821-5277-7. Archivado desde el original el 2 de marzo de 2021 . Consultado el 6 de junio de 2016 . Bourne Again Shell (bash) es el shell más común instalado en las distribuciones de Linux.
  41. ^ Foster-Johnson, Eric; Welch, John C.; Anderson, Micah (abril de 2005). Comenzando con las secuencias de comandos de Shell. John Wiley & Sons, Inc. pág. 6.ISBN 978-0-7645-9791-6. Archivado desde el original el 2 de marzo de 2021 . Consultado el 6 de junio de 2016 . Bash es, con diferencia, el shell más popular y constituye el shell predeterminado en los sistemas Linux y Mac OSX.
  42. ^ "Utilice zsh como shell predeterminado en su Mac - Soporte técnico de Apple". Archivado desde el original el 2 de diciembre de 2019 . Consultado el 1 de julio de 2019 .
  43. ^ "Instalación de los nuevos paquetes GNV". Archivado desde el original el 3 de octubre de 2020 . Consultado el 4 de septiembre de 2020 .
  44. ^ "Subsistemas de compatibilidad". Archivado desde el original el 23 de septiembre de 2020 . Consultado el 4 de septiembre de 2020 .
  45. ^ Juliana, Cino (10 de junio de 2017). "Estado de salida de bash de Linux y cómo configurar el estado de salida en bash - Techolac". Archivado desde el original el 21 de junio de 2019 . Consultado el 21 de junio de 2019 .
  46. ^ Huzaifa Sidhpurwala (24 de septiembre de 2014). "Ataque de inyección de código de variables de entorno especialmente diseñado por Bash". Sombrero rojo . Archivado desde el original el 25 de septiembre de 2014 . Consultado el 25 de septiembre de 2014 .
  47. ^ "Expansión de abrazaderas (manual de referencia de Bash)". www.gnu.org . Consultado el 10 de enero de 2024 .
  48. ^ "Manual de referencia de Bash". www.gnu.org . Archivado desde el original el 15 de marzo de 2018 . Consultado el 27 de marzo de 2018 .
  49. ^ "Depuración de scripts Bash". tldp.org . Archivado desde el original el 4 de noviembre de 2018 . Consultado el 20 de noviembre de 2018 .
  50. ^ "El conjunto incorporado (manual de referencia de Bash)". www.gnu.org . Consultado el 10 de enero de 2024 .
  51. ^ "Cambios de Bash [Bash Hackers Wiki (DEV 20200708T2203)]". wiki-dev.bash-hackers.org . Archivado desde el original el 23 de septiembre de 2019 . Consultado el 23 de septiembre de 2019 .
  52. ^ "Integraciones integradas de Bourne Shell (manual de referencia de Bash)". www.gnu.org . Consultado el 10 de enero de 2024 .
  53. ^ "Manual de referencia de Bash". www.gnu.org . Archivado desde el original el 15 de septiembre de 2019 . Consultado el 15 de septiembre de 2019 .
  54. ^ "Trabajar de forma más productiva con bash 2.x/3.x". www.caliban.org . Archivado desde el original el 29 de junio de 2018 . Consultado el 21 de junio de 2018 .
  55. ^ "6.11 Bash POSIX Mode", Manual de referencia de GNU Bash, para Bash, versión 4.1, 23 de diciembre de 2009, archivado desde el original el 3 de diciembre de 2010 , consultado el 26 de octubre de 2010
  56. ^ "Guía avanzada de secuencias de comandos Bash". www.tldp.org . Sección 37.2 (Bash, versión 3). Archivado desde el original el 5 de mayo de 2017 . Consultado el 5 de marzo de 2017 .
  57. ^ "Bash, versión 4". tldp.org . Archivado desde el original el 1 de julio de 2018 . Consultado el 25 de junio de 2018 .
  58. ^ "Matrices (manual de referencia de Bash)". www.gnu.org . Archivado desde el original el 11 de julio de 2018 . Consultado el 4 de julio de 2018 .
  59. ^ "macos: actualice bash a la versión 4.0 en OSX". Pregunta diferente . Archivado desde el original el 25 de junio de 2018 . Consultado el 25 de junio de 2018 .
  60. ^ ab Mendel Cooper. "Problemas de portabilidad". El proyecto de documentación de Linux . ibiblio.org. Archivado desde el original el 27 de enero de 2012 . Consultado el 26 de enero de 2012 .
  61. ^ ab "10. Archivos". Manual de políticas de Debian v4.5.0.2 . Archivado desde el original el 12 de mayo de 2020 . Consultado el 11 de mayo de 2020 .
  62. ^ "¿Cómo formatear la fecha y la hora en Linux, MacOS y Bash?". ¡Consejos para las conchas! . Archivado desde el original el 3 de junio de 2020 . Consultado el 3 de junio de 2020 .
  63. ^ checkbashisms(1)  –  Manual de comandos generales de Linux
  64. ^ shellcheck(1)  –  Manual de comandos generales de Linux
  65. ^ "Carcasa portátil". Configuración automática . Archivado desde el original el 2 de marzo de 2021 . Consultado el 20 de enero de 2020 .
  66. ^ "Ayuda de BASH: un tutorial de Bash". Hypexr.org. 5 de octubre de 2012. Archivado desde el original el 2 de marzo de 2021 . Consultado el 21 de julio de 2013 .
  67. ^ "Manual de referencia de Bash". www.gnu.org . Archivado desde el original el 15 de marzo de 2018 . Consultado el 27 de marzo de 2018 .
  68. ^ bashbug(1) Archivado el 2 de octubre de 2018 en Wayback Machine , die.net
  69. ^ "Comando Linux/Unix: bashbug" Archivado el 6 de octubre de 2014 en Wayback Machine , apple.com
  70. ^ "Manual de referencia de Bash". eswww.case.edu .
  71. ^ "Trabajar de forma más productiva con bash 2.x/3.x". www.caliban.org . Archivado desde el original el 29 de junio de 2018 . Consultado el 21 de junio de 2018 .
  72. ^ "Índice de /gnu/bash". ftp.swin.edu.au.Archivado desde el original el 8 de marzo de 2020 . Consultado el 15 de septiembre de 2019 .
  73. ^ ab "Introducción a la finalización programable". tldp.org . Consultado el 21 de enero de 2022 .
  74. ^ "Definición de NACIR DE NUEVO". www.merriam-webster.com . Consultado el 9 de enero de 2024 .
  75. ^ "Bash - Proyecto GNU - Fundación de Software Libre". www.gnu.org . Consultado el 10 de enero de 2024 .
  76. ^ "¿Qué es Bash? (Manual de referencia de Bash)". www.gnu.org . Consultado el 9 de enero de 2024 .
  77. ^ "Definición de BASH". www.merriam-webster.com . 5 de enero de 2024 . Consultado el 9 de enero de 2024 .
  78. ^ "BashGuide/Arrays - Wiki de Greg". mywiki.wooledge.org . Consultado el 10 de enero de 2024 .
  79. ^ "Sustitución de comandos: Wiki de Greg". mywiki.wooledge.org . Consultado el 10 de enero de 2024 .
  80. ^ "BashGuide/TestsAndConditionals - Wiki de Greg". mywiki.wooledge.org . Consultado el 10 de enero de 2024 .
  81. ^ "CAMBIOS - bash.git - bash". git.savannah.gnu.org . Consultado el 10 de enero de 2024 .
  82. ^ "Cambios de Bash [Bash Hackers Wiki]". 14 de febrero de 2021. Archivado desde el original el 14 de febrero de 2021 . Consultado el 10 de enero de 2024 .
  83. ^ "Sintaxis obsoleta y obsoleta [Bash Hackers Wiki]". 11 de febrero de 2021. Archivado desde el original el 11 de febrero de 2021 . Consultado el 10 de enero de 2024 .
  84. ^ "Bash - Proyecto GNU - Fundación de Software Libre". www.gnu.org . Consultado el 10 de enero de 2024 .
  85. ^ "Bash - Proyecto GNU - Fundación de Software Libre". www.gnu.org . Consultado el 10 de enero de 2024 .
  86. ^ "historial de versiones de github NOTICIAS v5.0". GitHub . Archivado desde el original el 4 de mayo de 2022 . Consultado el 1 de marzo de 2021 .
  87. ^ "Cambios de Bash [Bash Hackers Wiki]". Archivado desde el original el 18 de marzo de 2020 . Consultado el 25 de noviembre de 2019 .
  88. ^ "Lanzamiento Bash-5.0 disponible". listas.gnu.org . Archivado desde el original el 8 de noviembre de 2020 . Consultado el 1 de marzo de 2021 .

enlaces externos