stringtranslate.com

Bash (shell de Unix)

Bash , abreviatura de Bourne-Again SHell , es un programa de shell y lenguaje de comandos respaldado por la Free Software Foundation [2] y desarrollado por primera vez para el Proyecto GNU [3] por Brian Fox . [4] Diseñado como una alternativa de software 100% [5] libre para el Bourne shell , [6] [7] [8] fue lanzado inicialmente en 1989. [9] Su apodo es un juego de palabras, que hace referencia tanto a su predecesor, el Bourne shell, [10] como al concepto de renacimiento . [11] [12]

Desde sus inicios, Bash ha ganado una amplia adopción y se utiliza comúnmente como el shell de inicio de sesión predeterminado para numerosas distribuciones de Linux . Tiene importancia histórica como uno de los primeros programas portados a Linux por Linus Torvalds , junto con el compilador GNU ( GCC ). [13] Está disponible en casi todos los sistemas operativos modernos, lo que lo convierte en una herramienta versátil en varios entornos informáticos.

Como procesador de comandos , Bash opera dentro de una ventana de texto donde los usuarios ingresan comandos para ejecutar varias tareas. También admite la ejecución de comandos desde archivos, conocidos como scripts de shell , lo que facilita la automatización . De acuerdo con las convenciones de shell de Unix , Bash incorpora un rico conjunto de características. Las palabras clave , la sintaxis , las variables con alcance dinámico y otras características básicas del lenguaje se copian del shell Bourne , sh. Otras características, por ejemplo, history , se copian del shell C , csh, y del shell Korn , ksh. Bash es un shell compatible con POSIX con varias extensiones.

Historia

Si bien bash fue desarrollado para UNIX y sistemas operativos similares a UNIX como GNU/Linux, [14] también está disponible en Windows, BeOS, [15] [16] y Haiku. [17]

Brian Fox comenzó a codificar Bash el 10 de enero de 1988, [18] después de que Richard Stallman se sintiera insatisfecho con la falta de progreso que estaba realizando un desarrollador anterior. [7] Stallman y la FSF consideraron que un shell libre que pudiera ejecutar scripts de shell existentes era 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 asumiendo el trabajo como empleado de la FSF. [7] [19] Fox lanzó Bash como una versión beta, la versión .99, el 8 de junio de 1989, [9] y siguió siendo el principal mantenedor hasta algún momento entre mediados de 1992 [20] y mediados de 1994, [21] cuando fue despedido de la FSF [22] y su responsabilidad fue transferida a otro colaborador temprano, Chet Ramey. [23] [24] [25] [26] [27]

Desde entonces, Bash se ha convertido en el shell más popular entre los usuarios de Linux, convirtiéndose en el shell interactivo predeterminado en las distintas distribuciones de ese sistema operativo [28] [29] y en las versiones macOS de Apple antes de Catalina en octubre de 2019. [30] [31] [32] Bash también ha sido portado a Microsoft Windows [33] [34] y distribuido con Cygwin y MinGW , a DOS por el proyecto DJGPP , a Novell NetWare , a OpenVMS por el proyecto GNU, [35] a ArcaOS , [36] y a Android a través de varias aplicaciones de emulación de terminal.

En septiembre de 2014, Stéphane Chazelas, un especialista en Unix/Linux, [37] descubrió un error de seguridad en el programa. El error, divulgado por primera vez el 24 de septiembre, se denominó 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, lo que permitiría la ejecución de código arbitrario . El error estaba relacionado con la forma en que Bash pasa definiciones de funciones a subshells a través de variables de entorno . [38]

Características

Como procesador de comandos , Bash opera dentro de una ventana de texto donde los usuarios ingresan comandos para ejecutar varias tareas. También admite la ejecución de comandos desde archivos, conocidos como scripts de shell , lo que facilita la automatización . De acuerdo con las convenciones de shell de Unix , Bash incorpora un amplio conjunto de características, que incluyen:

Bash también ofrece...

Las palabras clave , la sintaxis , las variables con alcance 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 .

La sintaxis de comandos de Bash es un superconjunto de la sintaxis de comandos de Bourne Shell. Bash admite la expansión de llaves , [40] la finalización de la línea de comandos (finalización programable), [41] la depuración básica [42] [43] y el manejo de señales (utilizando trap) desde bash 2.05a [44] [45] entre otras características. Bash puede ejecutar la gran mayoría de los scripts de Bourne Shell sin modificación, con la excepción de los scripts de Bourne Shell que tropiezan con un comportamiento de sintaxis marginal interpretado de manera diferente en Bash o intentan ejecutar un comando del sistema que coincide con un Bash incorporado más nuevo, etc. La sintaxis de comandos de Bash incluye ideas extraídas de Korn Shell (ksh) y C Shell (csh) como la edición de línea de comandos, el historial de comandos ( historycomando), [46] la pila de directorios, las variables $RANDOMy y la sintaxis de sustitución de comandos$PPID POSIX .$(...)

Cuando un usuario presiona la tecla de tabulación dentro de una consola de comandos interactiva, Bash utiliza automáticamente el completado de línea de comandos , desde la versión beta 2.04, [47] para hacer coincidir nombres de programas, nombres de archivos y nombres de variables parcialmente escritos. El sistema de completado de línea de comandos de Bash es muy flexible y personalizable, y a menudo se incluye con funciones que completan argumentos y nombres de archivos para programas y tareas específicos.

La sintaxis de Bash tiene muchas extensiones que no existen en Bourne Shell. Bash puede realizar cálculos enteros ("evaluación aritmética") sin generar procesos externos. Para ello, utiliza la sintaxis ((...))de comandos y variables. 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 de Bourne Shell ' '. Bash admite la sustitución de procesos utilizando la sintaxis y , que sustituye la salida de (o la entrada a) un comando donde normalmente se utiliza un nombre de archivo. (Esto se implementa a través de tuberías sin nombre /proc/fd/ en sistemas que lo admiten, o mediante tuberías con nombre temporales cuando sea necesario).$((...))&>command > file 2>&1<(command)>(command)

Cuando se utiliza la palabra clave 'function', las declaraciones de funciones de Bash no son compatibles con los scripts Bourne/Korn/POSIX (KornShell tiene el mismo problema cuando se utiliza 'function'), 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 que se está volviendo menos común a medida que Linux se extiende más. Pero en modo POSIX, Bash se ajusta a POSIX más estrechamente. [48]

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

Bash 3.0 admite la coincidencia de expresiones regulares en proceso utilizando una sintaxis que recuerda a Perl . [49]

En febrero de 2009, [50] Bash 4.0 introdujo soporte para matrices asociativas . [51] Los índices de matrices asociativas son cadenas, de manera similar a AWK o Tcl . [52] Se pueden usar 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 continúa usando versiones anteriores. [53] Zsh se convirtió en el shell predeterminado en macOS con el lanzamiento de macOS Catalina en 2019. [54]

Expansión de la abrazadera

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 ape 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 portables, porque Bourne shell no produce el mismo resultado.

$ # shell bash $ /bin/bash  -c 'echo a{p,c,d,b}e' ape ace ade abe $ # Un shell tradicional no produce la misma salida $ /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, primero se expanden las llaves y luego se sustituyen los comodines resultantes de la forma habitual. Por lo tanto, se puede obtener una lista de imágenes JPEG y PNG en el directorio actual utilizando:

ls  *. { 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 dentro de 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 un tercer número entero para especificar el incremento.

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

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

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

Scripts de inicio

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

Ejemplo de inicio de Bash compatible con versiones anteriores

El ejemplo ~/.bash_profilesiguiente es compatible con Bourne Shell y ofrece una semántica similar a csh para ~/.bashrcy ~/.bash_login. Se trata de una evaluación de cortocircuito que prueba si el nombre del archivo existe y es legible, omitiendo la parte después de si no lo es.[ -r filename ] && cmd&&

[  -r  ~/.profile ] && . ~/.profile # configura el entorno, una vez, solo sintaxis Bourne-sh if [ -n " ​​$PS1 " ] ; then # ¿somos interactivos? [ -r ~/.bashrc ] && . ~/.bashrc # configuración de tty/prompt/función para shells interactivos [ -r ~/.bash_login ] && . ~/.bash_login # cualquier tarea al iniciar sesión solo para 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 bajo 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 de esqueleto que el sistema proporciona a las nuevas cuentas de usuario durante la configuración. Los scripts de inicio que lanzan 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 las variables de entorno del usuario antes de lanzar el administrador de ventanas . Estos problemas a menudo se pueden solucionar utilizando un archivo ~/.xsessiono ~/.xprofilepara leer el ~/.profile, que proporciona las variables de entorno que necesitan las ventanas de shell Bash generadas a partir del administrador de ventanas, como xterm o Gnome Terminal .

Portabilidad

La invocación de Bash con la --posixopción o la indicación set -o posixen un script hace que Bash se ajuste en gran medida al estándar POSIX 1003.2 . [55] Los scripts de shell de 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: [55] [56]

Si un fragmento de código utiliza una característica de este tipo, se denomina "bashismo", un problema para el uso portable. Debian checkbashismsy Vidar Holen shellcheckpueden utilizarse para asegurarse de que un script no contenga estas partes. [58] [59] La lista varía según el shell de destino real: la política de Debian permite algunas extensiones en sus scripts (como están en el shell dash ), [56] mientras que un script que pretende soportar shells Bourne pre-POSIX, como autoconf , está configureaún más limitado en las características que puede utilizar. [60]

Atajos de teclado

Bash utiliza GNU Readline para proporcionar atajos de teclado para edición desde la línea de comandos utilizando las combinaciones de teclas predeterminadas ( Emacs ). Las combinaciones de teclas de Vi se pueden habilitar ejecutando set -o vi. [61]

Gestión de procesos (Control de trabajos)

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

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

comando1 ;  comando2comando3

En este ejemplo, cuando se termina el comando1, se ejecuta el comando2, y cuando se completa el comando2, se ejecuta el comando3.

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

comando1 & 

O para tener una ejecución concurrente de command1 y command2, deben ejecutarse en el shell Bash de la siguiente manera:

comando1 y comando2  

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

Se puede detener un proceso y devolver el control a bash escribiendo Ctrl+ zmientras el proceso se está ejecutando en primer plano. [62]

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

$ jobs [1]- Ejecutando command1 y [2]+ Detenido command2

En la salida, el número entre paréntesis hace referencia al identificador del trabajo. El signo más indica el proceso predeterminado para bgy fg. El texto "En ejecución" y "Detenido" hacen referencia al estado del proceso . La última cadena es el comando que inició el proceso.

El estado de un proceso se puede cambiar utilizando varios comandos. El fgcomando trae un proceso al primer plano, mientras que bgestablece un proceso detenido que se está ejecutando en segundo plano. bgy fgpuede tomar un identificador de trabajo como su primer argumento, para especificar el proceso sobre el que 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 de forma prematura, enviándole una señal . El identificador de 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 " $SOMEWHERE " && ./do_something || 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á si el comando cd o el comando ./do_something devuelven 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 condicional de comandos.if ...;then ...;else ...;ficase $VARIABLE in $pattern)...;;$other_pattern)...;; esac

Informe de errores

Un comando externo llamado bashbug informa sobre errores en el shell Bash. Cuando se invoca el comando, se abre el editor predeterminado del usuario con un formulario para completar. El formulario se envía por correo electrónico a los encargados del mantenimiento de Bash (o, opcionalmente, a otras direcciones de correo electrónico). [63] [64]

Finalización programable

Bash admite la finalización programable a través de comandos integrados complete, compopty compgen. [65] La función ha estado disponible desde la versión beta 2.04 lanzada en 2000. [66] [67] Estos comandos permiten la especificación de finalización compleja e inteligente para comandos (es decir, programas instalados), funciones, variables y nombres de archivos. [68]

Los dos comandos completey compoptespecifican cómo se van a enumerar los argumentos de algunos comandos u opciones disponibles en la entrada de readline . A partir de la versión 5.1, la finalización del comando o la opción se suele activar pulsando una tecla después de escribir su nombre. [68]Tab ↹

Nombre del programa

El nombre del programa es una figura retórica o un chiste que comienza con un homenaje a Stephen Bourne , el creador de uno de los programas shell que a veces se han considerado superados por el shell bash. Su nombre se utiliza como un juego de palabras con la imagen del parto. Con ese juego de palabras, parecería, se añade una alusión : posiblemente a la idea hindú o budista de la reencarnación ; posiblemente al modismo cristiano conocido como " nacer de nuevo "; o muy posiblemente sólo a la idea más abstracta de renovación. Si bien numerosas traducciones al inglés del Nuevo Testamento cristiano , Libro de Juan , capítulo 3, contienen las palabras "nacer de nuevo", el diccionario Merriam-Webster define "nacer de nuevo" como una "... persona que ha hecho un compromiso renovado o confirmado .... [69] " Cualquiera que haya sido la piedra de toque original, al final el programa recibió el nombre de " Bourne Again SHell ". [70] [71]

El acrónimo de ese nombre es "bash", una palabra que significa "golpear violentamente". [72] 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 . Esas imágenes de emocionalidad negativa podrían verse como una contraposición directa a la idea de "nacer de nuevo".

El nombre podría considerarse un ejemplo de ironía verbal [73] o insinuación accidental . [74] La gramática de Bash se basó inicialmente en las gramáticas de los programas de shell de Unix más populares que se usaban en ese momento, 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, [75] [76] [77] [78] [79] [80] tanto 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, [81] y siguientes, es informativo.

La página del manual de Linux [82] [83] pretende ser el documento explicativo autorizado para comprender cómo bashfunciona, 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 mirando /usr/share/doc/bash/, /usr/local/share/doc/bash/, o directorios similares en su sistema. Un breve resumen está disponible ejecutando bash --help. [70] "

En los sistemas Linux modernos, la información sobre los comandos integrados del shell se puede encontrar ejecutando help, help [built-in name]o man builtinsen un indicador de terminal donde esté instalado bash. Algunos comandos, como echo, false, kill, o , dependiendo de su sistema y de su versión instalada localmente de bash, pueden hacer referencia a un comando integrado del shell o a un archivo ejecutable binario del sistema. Cuando se produce una de estas colisiones de nombres de comando, bash ejecutará de forma predeterminada una línea de comando determinada utilizando el comando integrado del shell. Especificar la ruta absoluta de un ejecutable binario (es decir, 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 cualquier "resúmenes de ayuda" vistos con y . Los comandos integrados del shell y los archivos ejecutables binarios del sistema del mismo nombre a menudo tienen opciones diferentes.testtrue/bin/printfkill --help/bin/kill --help

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

Vulnerabilidades

Un agujero de seguridad en Bash que data de la versión 1.03 (agosto de 1989), [86] denominado Shellshock , fue descubierto a principios de septiembre de 2014 y rápidamente condujo a una serie de ataques en Internet . [87] [88] [89] Los parches para corregir los errores se pusieron a disposición poco después de que se identificaran los errores.

Licencias

Desde 4.0: GPL-3.0 o posterior [90]

1.11? a 3.2: GPL-2.0 o posterior [91]

0,99? a 1,05?: GPL-1.0 o posterior [92] [51] [93]

Versiones

También está disponible una versión para Windows 10 y Windows 11 a través del Subsistema de Windows para Linux . [94] [95] También es el shell de usuario predeterminado en Solaris 11. [96] Bash también fue el shell predeterminado en BeOS , [15] y en 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 , [32] aunque Bash sigue estando disponible como un shell alternativo. [54]

Historial de versiones

Véase también

Referencias

  1. ^ https://ftp.gnu.org/gnu/bash/. {{cite web}}: Falta o está vacío |title=( ayuda )
  2. ^ "Free Software Foundation — trabajando juntos por el software libre — Página principal". fsf.org . Consultado el 19 de mayo de 2024 . La Free Software Foundation (FSF) es una organización sin fines de lucro con la misión mundial de promover la libertad de los usuarios de computadoras.
  3. ^ "GNU en pocas palabras". gnu.org . Consultado el 19 de mayo de 2024 . El objetivo final es proporcionar software libre para realizar todas las tareas que los usuarios de computadoras desean realizar, y así hacer que el software propietario sea cosa del pasado.
  4. ^ "GNU's Bulletin, vol. 1 no. 7, junio de 1989 :: GNU's Who". gnu.org . Consultado el 19 de mayo de 2024 . Brian Fox ha completado la versión de sh de GNU, llamada BASH, el 'Bourne Again SHell'.
  5. ^ "Software GNU". gnu.org . Consultado el 19 de mayo de 2024 . GNU es un sistema operativo que es 100% software libre.
  6. ^ "Bourne shell". ibm.com . Consultado el 19 de mayo de 2024. Bourne shell es un intérprete de comandos interactivo y un lenguaje de programación de comandos.
  7. ^ 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 de GNU estuvo "prácticamente terminado". El autor hizo repetidas promesas de entregar lo que había hecho, y nunca las cumplió. Finalmente, ya no podía creer que alguna vez entregara algo. Así que el miembro del personal de la Fundación, Brian Fox, ahora está implementando una imitación del shell Bourne.
  8. ^ Hamilton, Naomi (30 de mayo de 2008), "The AZ of Programming Languages: BASH/Bourne-Again Shell", Computerworld : 2, archivado desde el original el 6 de julio de 2011 , consultado el 21 de marzo de 2011 , Cuando Richard Stallman decidió 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. NOTA: El enlace original a computerworld.com.au está inactivo: consulte también copias del material original en
    • leethedocs.io,
    • computerworld.com.au y
    • la Universidad de Carolina del Sur.
  9. ^ 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 .
  10. ^ "Casi consigo un editor y compilador de Linux". Dr. Dobb's . Archivado desde el original el 2 de marzo de 2021 . Consultado el 12 de septiembre de 2020 .
  11. ^ Richard Stallman (12 de noviembre de 2010). «Acerca del Proyecto GNU». Free Software Foundation . 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.
  12. ^ Gattol, Markus (13 de marzo de 2011), Bourne-again Shell, archivado desde el original el 9 de marzo de 2011 , recuperado el 13 de marzo de 2011 , El nombre es un juego de palabras con el nombre de Bourne shell (sh), un shell de Unix temprano e importante escrito por Stephen Bourne y distribuido con la versión 7 de Unix alrededor de 1978, y el concepto de "nacer de nuevo".
  13. ^ 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.
  14. ^ "Bash FAQ, versión 4.14". Archivado desde el original el 1 de septiembre de 2018. Consultado el 9 de abril de 2016 .
  15. ^ ab "Una alternativa de escritorio". Forbes .
  16. ^ "Apéndice A: Uso del shell de línea de comandos de BeOS". testou.free.fr .
  17. ^ "Terminal".
  18. ^ 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
  19. ^ Richard Stallman (3 de octubre de 2010). "Acerca del Proyecto GNU". Free Software Foundation . 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 solo de herramientas o un entorno de desarrollo. Nuestro objetivo era un sistema operativo completo, y estos programas eran necesarios para ese objetivo.
  20. ^ 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 .
  21. ^ Ramey, Chet (1 de agosto de 1994). "Bash - el shell de GNU (Reflexiones y lecciones aprendidas)". Linux Journal . Archivado desde el original el 5 de diciembre de 2008. Consultado el 13 de noviembre de 2008 .
  22. ^ Chet Ramey (31 de octubre de 2010), Fechas en su entrevista con Computerworld, archivado desde el original el 20 de julio de 2012 , consultado el 31 de octubre de 2010
  23. ^ Hamilton, Naomi (30 de marzo de 2008). "The AZ of Programming Languages: BASH/Bourne-Again Shell". Computerworld . Archivado desde el original el 8 de noviembre de 2016 . Consultado el 1 de marzo de 2022 .
  24. ^ Ramey, Chet (20 de abril de 2021). "The GNU Bourne-Again Shell". Servicios de infraestructura tecnológica . Universidad Case Western Reserve . Consultado el 1 de marzo de 2022 .
  25. ^ Chet Ramey (12 de junio de 1989). «Bash 0.99 fixes & improvements». Grupo de noticias : gnu.bash.bug. Archivado desde el original el 10 de noviembre de 2012. Consultado el 1 de noviembre de 2010 .
  26. ^ Chet Ramey (24 de julio de 1989). «Algunas correcciones para 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 .
  27. ^ 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 .
  28. ^ Bresnahan, Christine; Blum, Richard (abril de 2015). Guía de estudio del Instituto Profesional CompTIA Linux+ Powered by Linux: Examen LX0-103 y Examen LX0-104 (3.ª ed.). John Wiley & Sons, Inc., pág. 5. ISBN  978-1-119-02122-3. Archivado del original el 2 de marzo de 2021 . Consultado el 6 de junio de 2016 . En Linux, la mayoría de los usuarios utilizan bash porque es el shell más popular.
  29. ^ Danesh, Arman; Jang, Michael (febrero de 2006). Mastering Linux. John Wiley & Sons, Inc., pág. 363. ISBN  978-0-7821-5277-7. Archivado del 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 que se instala con las distribuciones de Linux.
  30. ^ Foster-Johnson, Eric; Welch, John C.; Anderson, Micah (abril de 2005). Introducción a los scripts de shell. John Wiley & Sons, Inc., pág. 6. ISBN  978-0-7645-9791-6. Archivado del 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.
  31. ^ "Usa zsh como shell predeterminado en tu Mac - Soporte técnico de Apple". Archivado desde el original el 2 de diciembre de 2019 . Consultado el 1 de julio de 2019 .
  32. ^ ab Warren, Tom (4 de junio de 2019). «Apple reemplaza bash por zsh como shell predeterminado en macOS Catalina». The Verge . Archivado desde el original el 10 de junio de 2019. Consultado el 13 de junio de 2019 .
  33. ^ "Código fuente faltante - ¿Cumplimiento de la GPL? · Problema n.° 107 · Microsoft/WSL". GitHub . Archivado desde el original el 24 de septiembre de 2019 . Consultado el 8 de julio de 2016 .
  34. ^ "GNU Bash". Softpedia . SoftNews. 23 de enero de 2010. Archivado desde el original el 21 de octubre de 2017 . Consultado el 9 de abril de 2016 .
  35. ^ "Instalación de los nuevos paquetes GNU". Archivado desde el original el 3 de octubre de 2020 . Consultado el 4 de septiembre de 2020 .
  36. ^ "Subsistemas de compatibilidad". Archivado desde el original el 23 de septiembre de 2020 . Consultado el 4 de septiembre de 2020 .
  37. ^ Juliana, Cino (10 de junio de 2017). «Estado de salida de bash en Linux y cómo establecer el estado de salida en bash - Techolac». Archivado desde el original el 21 de junio de 2019. Consultado el 21 de junio de 2019 .
  38. ^ Huzaifa Sidhpurwala (24 de septiembre de 2014). "Ataque de inyección de código de variables de entorno especialmente diseñadas por Bash". Red Hat . Archivado desde el original el 25 de septiembre de 2014. Consultado el 25 de septiembre de 2014 .
  39. ^ "Entorno de ejecución de comandos (Manual de referencia de Bash)". www.gnu.org .
  40. ^ "Expansión de llaves (Manual de referencia de Bash)". www.gnu.org . Archivado desde el original el 15 de marzo de 2018 . Consultado el 10 de enero de 2024 .
  41. ^ {{ cite web bash.html#Completado programable | title = Manual de referencia de Bash | url = https://www.gnu.org/software/bash/manual/ }} | sitio web = www.gnu.org
  42. ^ "Depuración de scripts de Bash". tldp.org . Archivado desde el original el 4 de noviembre de 2018 . Consultado el 20 de noviembre de 2018 .
  43. ^ "La función Set Builtin (Manual de referencia de Bash)". www.gnu.org . Consultado el 10 de enero de 2024 .
  44. ^ "Cambios en 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 .
  45. ^ "Bourne Shell Builtins (Bash Reference Manual)" (Instrucciones integradas de Bourne Shell [Manual de referencia de Bash]) en www.gnu.org . Consultado el 10 de enero de 2024 .
  46. ^ "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 .
  47. ^ "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 .
  48. ^ "6.11 Bash POSIX Mode", The GNU Bash Reference Manual, 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
  49. ^ "Guía avanzada de scripts en 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 .
  50. ^ "Bash, versión 4". tldp.org . Archivado desde el original el 1 de julio de 2018 . Consultado el 25 de junio de 2018 .
  51. ^ 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 .
  52. ^ "Arrays (Bash Reference Manual)" (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 .
  53. ^ "macos - Actualizar bash a la versión 4.0 en OSX". Ask Different . Archivado desde el original el 25 de junio de 2018 . Consultado el 25 de junio de 2018 .
  54. ^ ab Hughes, Matthew (4 de junio de 2019). «¿Por qué macOS Catalina usa Zsh en lugar de Bash? Licencias». The Next Web . Archivado desde el original el 31 de diciembre de 2020. Consultado el 12 de enero de 2021 .
  55. ^ ab Mendel Cooper. "Problemas de portabilidad". The Linux Documentation Project . ibiblio.org. Archivado desde el original el 27 de enero de 2012 . Consultado el 26 de enero de 2012 .
  56. ^ 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 .
  57. ^ "¿Cómo formatear la fecha y la hora en Linux, MacOS y Bash?". ¡ Consejos de Shell! . Archivado desde el original el 3 de junio de 2020 . Consultado el 3 de junio de 2020 .
  58. ^ checkbashisms(1)  –  Manual de comandos generales de Linux
  59. ^ shellcheck(1)  –  Manual de comandos generales de Linux
  60. ^ "Portable Shell". Autoconf . Archivado desde el original el 2 de marzo de 2021. Consultado el 20 de enero de 2020 .
  61. ^ "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 .
  62. ^ "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 .
  63. ^ bashbug(1) Archivado el 2 de octubre de 2018 en Wayback Machine , die.net
  64. ^ "Comando Linux/Unix: bashbug" Archivado el 6 de octubre de 2014 en Wayback Machine , apple.com
  65. ^ "Manual de referencia de Bash". tiswww.case.edu .
  66. ^ "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 .
  67. ^ "Í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 .
  68. ^ ab "Introducción a la finalización programable". tldp.org . Consultado el 21 de enero de 2022 .
  69. ^ "Definición de NACER DE NUEVO". www.merriam-webster.com . Consultado el 9 de enero de 2024 .
  70. ^ abc «Bash - Proyecto GNU - Free Software Foundation». www.gnu.org . Consultado el 10 de enero de 2024 .
  71. ^ "¿Qué es Bash? (Manual de referencia de Bash)". www.gnu.org . Consultado el 9 de enero de 2024 .
  72. ^ "Definición de BASH". www.merriam-webster.com . 5 de enero de 2024 . Consultado el 9 de enero de 2024 .
  73. ^ "Definición de ironía, ejemplos comunes y significado en la literatura". 31 de agosto de 2020.
  74. ^ "Insinuación - Ejemplos y definición de insinuación". 2 de enero de 2014.
  75. ^ "BashGuide/Arrays - Wiki de Greg". mywiki.wooledge.org . Consultado el 10 de enero de 2024 .
  76. ^ "CommandSubstitution - Wiki de Greg". mywiki.wooledge.org . Consultado el 10 de enero de 2024 .
  77. ^ "BashGuide/TestsAndConditionals - Wiki de Greg". mywiki.wooledge.org . Consultado el 10 de enero de 2024 .
  78. ^ "CAMBIOS - bash.git - bash". git.savannah.gnu.org . Consultado el 10 de enero de 2024 .
  79. ^ "Cambios en 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 .
  80. ^ "Sintaxis obsoleta y en desuso [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 .
  81. ^ "Especificaciones básicas del Open Group, número 7, edición 2018". pubs.opengroup.org .
  82. ^ "Página del manual de BASH(1)". tiswww.case.edu .
  83. ^ "bash.0\doc - bash.git - bash". git.savannah.gnu.org .
  84. ^ "El shell Bourne-Again de GNU". tiswww.case.edu .
  85. ^ "Preguntas frecuentes".
  86. ^ Chazelas, Stephane (4 de octubre de 2014). «Archivos de la lista de correo oss-sec». Seclists.org . Archivado desde el original el 6 de octubre de 2014. Consultado el 4 de octubre de 2014 .
  87. ^ Leyden, John (24 de septiembre de 2014). "Patch Bash NOW: el error 'Shell Shock' deja a los sistemas OS X y Linux totalmente expuestos". The Register . Archivado desde el original el 16 de octubre de 2014. Consultado el 25 de septiembre de 2014 .
  88. ^ Perlroth, Nicole (25 de septiembre de 2014). "Los expertos en seguridad esperan que el error de software 'Shellshock' en Bash sea significativo". The New York Times . Archivado desde el original el 5 de abril de 2019. Consultado el 25 de septiembre de 2014 .
  89. ^ Seltzer, Larry (29 de septiembre de 2014). "Shellshock hace que Heartbleed parezca insignificante". ZDNet . Archivado desde el original el 14 de mayo de 2016.
  90. ^ Proyecto GNU . «Archivo README». Archivado desde el original el 26 de abril de 2019. Consultado el 16 de abril de 2014. Bash es software libre, 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).
  91. ^ "bash-1.11". oldlinux.org . Archivado desde el original el 15 de octubre de 2021 . Consultado el 9 de junio de 2021 . Consulte test.c para obtener información sobre la GPL-2.0 o posterior
  92. ^ "bash-1.05.tar". oldlinux.org .
  93. ^ "¿Hay alguna manera de descargar el código fuente bash presumiblemente inicial bash-0.99?". unix.stackexchange.com .
  94. ^ "Cómo instalar la herramienta de línea de comandos de 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 .
  95. ^ Hoffman, Chris (30 de julio de 2021). "Cómo instalar el subsistema de Windows para Linux en Windows 11". How-To Geek . Consultado el 12 de octubre de 2022 .
  96. ^ "Cambios en las características del entorno de usuario". Oracle. Archivado desde el original el 12 de junio de 2018. Consultado el 8 de junio de 2018 .
  97. ^ "Historial de versiones de GitHub NEWS v5.0". GitHub . Archivado desde el original el 4 de mayo de 2022 . Consultado el 1 de marzo de 2021 .
  98. ^ "Cambios en Bash [Bash Hackers Wiki]". Archivado desde el original el 18 de marzo de 2020 . Consultado el 25 de noviembre de 2019 .
  99. ^ "Ya está disponible la versión Bash-5.0". lists.gnu.org . Archivado desde el original el 8 de noviembre de 2020 . Consultado el 1 de marzo de 2021 .

Lectura adicional