Otros han señalado que las premisas de la pregunta, que el shell Bourne Again es predeterminado y omnipresente, son totalmente erróneas.
Además de eso, existen buenas razones para usar algo distinto del shell Bourne Again para interpretar los scripts del shell. Estas razones motivadas de Ubuntu y el gran proyecto de Debian, durante varios años, para eliminar del bash y hacer como muchos de los scripts de shell a cargo de la inicialización del sistema (que era una gran cantidad de secuencias de comandos shell con sistema 5 rc
) y la instalación de paquetes / uso eliminación del Shell de Debian Almquist en lugar del shell Bourne Again.
En pocas palabras: el shell Bourne Again, repleto de características interactivas como es, no es el intérprete de shell más rápido para un script de shell compatible con POSIX. Entonces, si uno puede hacer que los scripts de shell sean compatibles con POSIX, interpretándolos con un programa más liviano, como el shell Debian Almquist, el sistema funcionará mejor. (Al final, Debian tuvo que hacer pequeños ajustes en el shell Almquist, para agregar soporte para un par de construcciones de shell que no son POSIX que simplemente estaban demasiado profundas y muy integradas y eran demasiado útiles para deshacerse de ellas).
El resultado de todo fue una gran ganancia en el rendimiento de arranque.
Entonces, hay dos clases distintas de shell para considerar, aquí:
- Los shells con todas las características interactivas llamativas, que se configuran como shells de inicio de sesión interactivos para los usuarios en la base de datos de cuentas.
- Los shells que interpretan muchos scripts rápidamente, que son utilizados como intérpretes de scripts por los programas de scripts de shell.
Tenga en cuenta que hablar de esto como "preferir /bin/sh
" es simplificar demasiado. Debian en realidad tenía al menos dos objetivos:
Frente a los administradores que utilizan el shell Debian Almquist, el shell Z (en modo POSIX), el shell Bourne Again (en modo POSIX), el shell MirBSD Korn y otros /bin/sh
, ya que había ...
... haciendo que las secuencias de comandos sean lo más portátiles posible, de modo que cambiar lo /bin/sh
mapeado no rompa las cosas; o
... haciendo que los scripts no portátiles se dirijan explícitamente al programa de intérprete correcto , en lugar de simplemente esperar ese /bin/sh
mapa.
Hacía que el shell Debian Almquist fuera el mapeo predeterminado para /bin/sh
Bourne Shell, de modo que los scripts que eran compatibles con POSIX (o, más adecuadamente, conformes con el Manual de políticas de Debian) se ejecutaban más rápidamente.
Y, por supuesto, una vez que uno entra en esto, uno puede llevarlo mucho más lejos; como considerar las compensaciones de eficiencia de los gustos /bin/true
y /usr/bin/clear
ser scripts de shell o programas compilados. Pero eso está más allá del alcance de esta respuesta, afortunadamente. ☺
Nada de esto es muy nuevo, ni siquiera específico de Unix, por supuesto. Volver antes de la vuelta del siglo, escribí y publiqué un intérprete de línea de comandos que se incluye en ambos y sabores "interactivos" "no interactivos", que explica precisamente esta división en su mana y tomando nota de la diferencia entre las COMSPEC
y OS2_SHELL
variables de entorno. Del mismo modo, la discusión sobre la eliminación de bashismos en el Sistema V de Debian rc
y los scripts de instalación / eliminación de paquetes se remontan a la década de 1990.
Otras lecturas
/bin/sh
si no usabash
funciones específicas . Un día podría tener que usar uno de sus scripts en un sistema en el que no está instalado (servidor remoto, computadora integrada ...)