¿Por qué bash es estándar en Linux?

19

Las distribuciones de Linux más recientes incluyen bash como shell predeterminado, aunque hay otros, (posiblemente) mejores shells disponibles.

Estoy tratando de entender si se trata de algunas sobras históricas que nadie quiere cambiar, o hay algunas buenas razones por las que bash sea la primera opción?

Milan Babuškov
fuente
19
La mayoría de las computadoras se venden con MS Windows instalado, aunque hay otros sistemas operativos posiblemente mejores disponibles.
choroba
Bash es simple. Por lo general, puede hacer todo lo que el usuario quiere que haga. Puedes cambiarlo fácilmente. No será divertido tener scsh por defecto.
cnd
44
Bash es la implementación OSS del estándar UNIX /bin/sh, que es el shell predeterminado en UNIX-es 'normal' ...
Jan Marek
Sé que esto un enlace wiki pero responde a su pregunta en profundidad, lo que uno tiene la cáscara que el otro en.wikipedia.org/wiki/Unix_shell
whoami
66
Por favor defina (posiblemente) mejor . Creo que bashes el mejor shell porque lo conozco bien y está en todas partes, hace todo lo que necesito de manera concisa y relativamente fácil, es fácil de leer y las personas pueden entenderlo sin saber cómo crear scripts de bash. ¿Qué más quieres de un caparazón? Si desea muchas funciones de programación, está utilizando un shell incorrectamente.
nicerobot

Respuestas:

18

La respuesta corta es porque Linux es realmente GNU / Linux. Solo el kernel es Linux, pero la colección base de utilidades que proporciona el entorno similar a Unix es proporcionada por GNU y el shell de GNU es bash.
Como dije, esa es la respuesta corta;)

editado para agregar algunos comentarios adicionales ...
Permítanme prefijar diciendo que no soy un historiador de Unix, por lo que solo puedo responder en mi humilde opinión

Algunos puntos, en primer lugar, bash es el fregadero de conchas de la cocina, como emacs es para los editores.
En el momento en que se lanzó bash, no había implementaciones de ksh gratuitas, tcsh era un reemplazo de csh gratuito, pero Stallman tenía una queja contra csh para la programación de shell.
Como shell interactivo, la recuperación de comandos / historial fue excelente, junto con el almacenamiento del historial de una sesión a otra. Fue una caída en el reemplazo de sh, bsh, ksh para la programación de shell y fue un shell interactivo decente.
Como una bola de nieve rodando cuesta abajo, bash ha ganado impulso y tamaño.

Sí, hay docenas de otras conchas; los proyectiles que se adaptan mejor a un propósito o gusto individual, pero para un solo uso general, el bash bash hace un trabajo decente y ha tenido muchos ojos en él durante más de 20 años.

bsd
fuente
Entiendo. Sin embargo, la mayoría de las distribuciones incluyen muchos otros programas que no son GNU. Me parece que bash se usa solo porque se usa, al igual que choroba comentó que Windows es un sistema operativo dominante. Sin embargo, durante décadas, Windows tuvo un mejor soporte de hardware (controladores) que dificultó el cambio a otro sistema operativo. No veo qué función única ofrece Bash para evitar que los usuarios cambien.
Milan Babuškov
+1 y uno bueno @bdowning para la respuesta corta y simple :-)
Nikhil Mulley
2
@ MilanBabuškov Bash debe instalarse porque hay demasiados scripts que utilizan funciones específicas de bash. Una vez que comience con esa suposición, debe justificar los depósitos adicionales. Dash se incluyó en distos como Ubuntu como parte de un plan para reducir los tiempos de arranque. Dado que bash es "suficientemente bueno" como un shell interactivo, ningún otro shell ha dado un argumento lo suficientemente fuerte como para ser parte de la carga predeterminada del paquete.
ssokolow
12

Bash tiene algunos competidores potenciales:

  • Zsh tiene instalaciones interactivas más avanzadas, pero algunas peculiaridades cuando se trata de secuencias de comandos (ahora menos que antes). A principios y mediados de la década de 1990, cuando Linux estaba en su infancia, zsh era prácticamente desconocido.
  • Ksh era el estándar de facto en unidades comerciales desde mediados de la década de 1980, pero era un software propietario hasta 2000, por lo que no era una opción en Linux. Además, ksh tenía capacidades de edición de línea de comando de calidad inferior, en comparación con bash.
  • Pdksh , un clon gratuito de ksh, habría sido una opción, pero no era muy conocido y tenía capacidades de edición de línea de comandos deficientes. (Pdksh ya no es un proyecto muy activo, aunque todavía se usa en algunos BSD, ahora que ATT ksh es gratuito).
  • Algunas distribuciones instalan una variante de ceniza como /bin/sh. Ash (con lo que me refiero a cualquiera de la familia de conchas sueltas llamada ash) está diseñado para ser pequeño y rápido, sin características interactivas (es solo para editar guiones). El avivamiento de las cenizas es relativamente reciente; En la década de 1990, las variantes existentes carecían de muchas características.
  • Tcsh fue el shell interactivo más avanzado hasta que apareció zsh, pero es incompatible con sh y no es tan bueno con los scripts .

Además, bash es el shell oficial de GNU , y los sistemas Linux son realmente GNU / Linux : muchos de los programas principales provienen de GNU, incluso si la parte más conocida, el kernel de Linux, no lo es. En el momento en que se convirtió en el estándar de facto, bash era conocido, tenía un estado oficial y tenía un conjunto de características decente.

Gilles 'SO- deja de ser malvado'
fuente
Según tengo entendido, el estándar POSIX especifica las características requeridas para el shell Bourne, en / bin / sh, y la mayoría de las distribuciones de Linux dependen de los scripts de shell escritos para usar el shell Bourne. BASH es en la base una versión mejorada del shell Bourne, y / bin / sh es en realidad un enlace a / bin / bash, que cuando se ejecuta se ejecuta solo con las características del shell Bourne.
bgvaughan
@bgvaughan Algunas distribuciones envían bash como /bin/shotras, envían cenizas. Por ejemplo, Ubuntu /bin/shha sido dash(el tenedor de cenizas mantenido por Debian) por un tiempo. Bash tiene más características, la ceniza es más pequeña y más rápida. Ambos son compatibles con POSIX (o al menos lo suficientemente compatibles en la práctica).
Gilles 'SO- deja de ser malvado'
4

¿La respuesta más simple? Porque algo "tiene que ser" el valor predeterminado. El valor predeterminado más sensible es aquel con el que la mayoría de los usuarios ya se sienten cómodos. En ese punto, Bash es una buena opción. Todos tienen la libertad de elegir cuál es el mejor en su mundo. La mayoría elegirá usar el predeterminado si siempre ha hecho lo que necesita.

BentFX
fuente
3

Viniendo de DOS (con doskey instalado) Realmente perdí la función de recuperar los últimos comandos simplemente moviendo el cursor hacia arriba / abajo. BASH fue IMO, el primer shell que implementó esto en * nix.

Entonces, probablemente a la mayoría de los chicos de esa generación en adelante les gustaba bash.

Nils
fuente
Aunque no había usado una computadora hasta la década de 1990, suponía que tcshera el primer shell * nix que usaba las teclas de flecha para navegar de un lado a otro a través del historial del shell.
Anthony G - justicia para Monica
1

Todas las otras respuestas son geniales, pero desde un punto de vista práctico: si me siento frente a un sistema desconocido (o accedo de forma remota) y necesito hacer algo, puedo contar con que bash esté disponible en todos los sistemas excepto en los más antiguos. Puedo seguir adelante y hacer las cosas.

Como se señaló en otras respuestas y en su pregunta, hay muchos otros shells (escucho muchas cosas buenas sobre zsh, pero no lo he probado), pero varían con respecto a la sintaxis y, a veces, los comandos utilizados para hacer las cosas. Si solo quiero hacer algo, bash es bastante complicado sin tener que adaptarme a otro shell.

Además, cuando escribo un script de shell que generalmente puede ser útil, lo escribo para bash y sé que si tengo mucho cuidado de no hacer cosas dependientes del sistema, se ejecutará en casi cualquier lugar.

Joe
fuente
1

Inercia.

Bash resultó ser el shell gratuito más fácilmente disponible cuando los sistemas Linux (GNU / Linux, si lo prefiere) comenzaron a aparecer. El hecho de que sea del proyecto GNU no hizo daño.

En cuanto a por qué sigue siendo el shell predeterminado, nunca ha habido una razón suficiente para cambiarlo. Incluso si algún otro shell es mejor, hay ventajas de tener el mismo shell de inicio de sesión predeterminado en diferentes distribuciones, y sería difícil lograr que todos (Debian, Red Hat, Suse, etc.) acuerden cambiar a otra cosa.

Y después de todo, es solo un valor predeterminado. Cualquier usuario puede usar chshpara cambiar su shell de inicio de sesión. No hay necesidad de cambiar el valor predeterminado para todos.

Keith Thompson
fuente