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.
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, revelado 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]
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:
if
, case
, select
,&&
) y OR ( ||
) lógicos, yfor
, while
, until
bucles yfor ((
;[
, [[ ... ]]
, incluyendo<
y >
;|
;( ... )
;trap
función incorporada;job_spec &
:;#
y:
;\
también se respetan al final de las líneas.$'...'
ykernel{-headers}
,~
,$foo
o ${bar}
, incluyendodeclare -A
, y${foo//x/y}
para sed 's/x/y/g'
,${bar##[a-zA-Z0-9]*}
para cut -c8-
,${!array[@]}
, y${var:?error message}
, entre otros,$( ... )
,<()
o >()
, cuando un sistema lo admita:(( ... ))
o $(( ... ))
, incluyendo*
, ?
, [...]
, y>
y adición de archivos >>
,<<
,<<<
, que permiten utilizar parámetros como entrada, y>|
, que puede forzar la sobrescritura de un archivo cuando la configuración "noclobber" de un shell está habilitada;Bash también ofrece...
~/.bashrc
y ~/.profile
(es decir, archivos de puntos );set
integradas ) y opciones de shell ( shopt
integradas ) que alteran el comportamiento del shell;pushd
y popd
funciones integradas),help
,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 ( history
comando), [46] la pila de directorios, las variables $RANDOM
y 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 intérpretes Bourne y Korn, y es compatible con POSIX. Debido a estas y otras diferencias, los scripts de shell de 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 vuelve más extendido. 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]
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 el shell Bourne 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 mediante:
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 eval
funció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
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
.
El ejemplo ~/.bash_profile
siguiente es compatible con Bourne Shell y ofrece una semántica similar a csh para ~/.bashrc
y ~/.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"
Algunas versiones de Unix y Linux contienen scripts de inicio del sistema Bash, generalmente bajo el /etc
directorio . 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 ~/.xsession
o ~/.xprofile
para 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 .
La invocación de Bash con la --posix
opción o la indicación set -o posix
en 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]
[[...]]
construcción de prueba extendida de doble corchete y su correspondencia de expresiones regulares(( ... ))
; $(( ... ))
es POSIX)local
para variables con ámbitoSi un fragmento de código utiliza una característica de este tipo, se denomina "bashismo", un problema para el uso portable. Debian checkbashisms
y Vidar Holen shellcheck
pueden 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á configure
aún más limitado en las características que puede utilizar. [60]
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]
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 se refiere al identificador del trabajo. El signo más indica el proceso predeterminado para bg
y fg
. El texto "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 utilizando varios comandos. El fg
comando trae un proceso al primer plano, mientras que bg
establece un proceso detenido que se ejecuta en segundo plano. bg
y fg
puede 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 kill
comando 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
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 ...;fi
case $VARIABLE in $pattern)...;;$other_pattern)...;; esac
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]
Bash admite la finalización programable a través de comandos integrados complete
, compopt
y 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 complete
y compopt
especifican 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 ↹
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.
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 bash
funciona, 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 builtins
en 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.test
true
/bin/printf
kill --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.
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.
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]
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]
{{cite web}}
: Falta o está vacío |title=
( ayuda )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.
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.
Brian Fox ha completado la versión de sh de GNU, llamada BASH, el 'Bourne Again SHell'.
GNU es un sistema operativo que es 100% software libre.
Bourne shell es un intérprete de comandos interactivo y un lenguaje de programación de comandos.
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.
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
"Bourne Again Shell" es un juego de palabras con el nombre Bourne Shell , que era el shell habitual en Unix.
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".
Actualmente he portado bash(1.08) y gcc(1.40), y todo parece funcionar.
fecha de nacimiento: domingo 10 de enero de 1988. Autor inicial: Brian Fox
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.
En Linux, la mayoría de los usuarios utilizan bash porque es el shell más popular.
Bourne Again Shell (bash) es el shell más común que se instala con las distribuciones de Linux.
Bash es, con diferencia, el shell más popular y constituye el shell predeterminado en los sistemas Linux y Mac OSX.
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).
Consulte test.c para obtener información sobre la GPL-2.0 o posterior