Pensé que /bin/sh
era un enlace simbólico a mi caparazón de elección. Siempre lo he usado bash
, así que supuse que eso /bin/sh
señalaría /bin/bash
. Sin embargo, resulta que apunta /bin/dash
.
Se pone más divertido. Comienzo dash
y hago echo $SHELL
y se imprime /bin/bash
(¿entonces son básicamente lo mismo?). Sin embargo, la página de manual de dash
es completamente diferente de la página de manual de bash
(¿entonces no son lo mismo?).
echo $SHELL
imprime/bin/bash
porque esa variable está configurada para el shell predeterminado que comienza cuando inicia sesión en lugar del shell actual que está ejecutando. Inicie ksh o zsh desde un indicador de Bash yecho $SHELL
aún dirá/bin/bash
. Useps
para ver lo que se está ejecutando actualmente.Respuestas:
Debian y Ubuntu cambiaron a dash (iirc) debido a un par de cosas. En primer lugar, Bash se ha vuelto grande con los años. De hecho, el
/bin/bash
binario en mi sistema Ubuntu 8.04 es casi diez veces (!) Tan grande como/bin/dash
. Ahora, eso no importa mucho para el uso diario de shell, pero sí importa en las siguientes situaciones:La desventaja de usar Dash en lugar de Bash para las secuencias de comandos es que muchas personas usan sutilezas sintácticas que solo Bash tiene, los llamados Bashisms . Ejemplos de Bashisms son subcadenas, como esta:
Y esto:
Dash, por otro lado, tiene como objetivo principal ser compatible con POSIX (y no más que eso), le dará un error de mala subtición si intenta esto:
Esto importará si usa
/bin/sh
(y por lo tantodash
) como intérprete para sus shellscripts y usa Bashisms en ellos. Debian y Ubuntu tienen buenas páginas wiki sobre Bashisms y por qué son malas en shellscripts en general y init-scripts en particular. Por lo tanto, debe elegir conscientemente si necesita/bin/sh
o/bin/bash
como intérprete para su guión.No se supone que Dash se use como shell predeterminado en sus sistemas. Solo usa Bash para eso. Para la portabilidad de sus scripts, puede usar Dash como intérprete para aumentar las probabilidades de que los scripts se ejecuten en otros sabores de Linux y Unixes.
fuente
/bin/bash
; muchos sistemassh
que no son Linux tienen shells reales que ni siquiera son compatiblesbash
.echo ${a#123}
no es un bashism, es parte de la especificación de expansión del parámetro POSIX pubs.opengroup.org/onlinepubs/009695399/utilities/… Simplemente no obtienes los Bash de estilo sed más avanzados, Los posix son estilo de subcadena + caracteres de expansión simples. Es decir, POSIX también permiteecho ${a#*6}
Echa un vistazo aquí: https://wiki.ubuntu.com/DashAsBinSh tal vez te ayude.
fuente
dash es un reemplazo ligero de bash, supongo que usas ubuntu que cambió hace unos años.
Aunque no es demasiado bueno, en mi humilde opinión. http://forums.debian.net/viewtopic.php?f=20&t=45116
fuente
Como no todos los shells se configuran
$SHELL
cuando se ejecutan, descubres tu shell actual con:Si da un error, es csh, de lo contrario es con el
argv[0]
que fue invocado, que generalmente es el shell, quizás con un-
guión inicial, para indicar que es un shell de inicio de sesión.Esto no está garantizado , ya que
argv[0]
está bajo el control del proceso de invocación, pero en la práctica es el enfoque más confiable.fuente