1485 votos

Diferencia entre sh y bash

Al escribir programas de shell, que utilizamos a menudo /bin/sh y /bin/bash. Yo normalmente uso bash, pero no sé cuál es la diferencia entre ellos.

Lo principal diferencia entre los bash y sh?

¿Qué tenemos que ser conscientes de cuando la programación en bash y sh?

1287voto

Roman Cheplyaka Puntos 15145

¿Qué es sh

sh (o el Lenguaje de Comandos del Shell) es un lenguaje de programación descrito por el POSIX estándar. Tiene muchas implementaciones (ksh88, dash, ...). bash también puede ser se considera una implementación de sh (ver abajo).

Porque sh es una especificación, no es una aplicación, /bin/sh es un enlace simbólico (o un enlace duro) para una aplicación real en la mayoría de los sistemas POSIX.

¿Qué es bash

bash comenzó como un shcompatible con la aplicación (aunque es anterior al estándar POSIX por un par de años), pero con el tiempo ha adquirido varias extensiones. Muchas de estas extensiones puede cambiar el comportamiento de los válido POSIX scripts de shell, por lo que, de por sí, bash no es válido POSIX. Más bien, es un dialecto del POSIX idioma.

bash apoya --posix interruptor, lo cual hace que sea más compatible con POSIX. También intenta imitar POSIX si se invoca como sh.

sh == bash?

Durante mucho tiempo, /bin/sh utilizado para señalar /bin/bash en la mayoría de los sistemas GNU/Linux. Como resultado, se ha vuelto prácticamente seguro ignorar la diferencia entre los dos. Pero eso empezó a cambiar recientemente.

Algunos popular ejemplos de sistemas donde /bin/sh no señala /bin/bash (y en algunos de los cuales /bin/bash puede incluso no existir) son:

  1. Moderno Debian y Ubuntu, lo que el enlace simbólico sh a dash por defecto;
  2. Busybox, que es la que generalmente se ejecuta durante el tiempo de arranque del sistema Linux como parte de la initramfs. Utiliza el ash shell de aplicación.
  3. BSDs. OpenBSD usa pdksh, un descendiente de la shell de Korn. FreeBSD sh es descendiente de la original de UNIX shell Bourne.

El proceso de la línea de

En última instancia, depende de usted para decidir cual usar, por escrito, el "proceso" de la línea.

Por ejemplo.

#!/bin/sh

utilizará sh (y lo que sucede a punto a),

#!/bin/bash

utilizará /bin/bash si está disponible (y no con un mensaje de error si no lo está). Por supuesto, también puede especificar otra aplicación, por ejemplo.

#!/bin/dash

Cual usar

Para mis propios scripts, prefiero sh por las siguientes razones:

  • es estandarizado
  • es mucho más sencillo y fácil de aprender
  • es portable a través de sistemas POSIX - incluso si suceden no tienen bash, están obligados a tener sh

Hay ventajas en el uso de bash como bueno. Sus características hacen que la programación sea más cómoda y similar a la programación en otros lenguajes de programación modernos. Estos incluyen cosas como el ámbito de las variables locales y matrices. Llanura sh es un muy minimalista lenguaje de programación.

162voto

Rein Henrichs Puntos 3592

sh: http://man.cx/sh bash: http://man.cx/bash

TL;DR: bash es un superconjunto de sh con una forma más elegante de la sintaxis y más funcionalidad. Es seguro usar bash shebang línea en casi todos los casos es muy ubicuo en las plataformas modernas.

NOTA: en algunos entornos, sh es bash. Compruebe sh --version.

2voto

Si lo desea puede ver el estándar Posix para los peces y su lenguaje de comandos:

http://pubs.opengroup.org/onlinepubs/9699919799/utilities/sh.html

http://pubs.opengroup.org/onlinepubs/9699919799/utilities/V3_chap02.html

Iteramos.com

Iteramos es una comunidad de desarrolladores que busca expandir el conocimiento de la programación mas allá del inglés.
Tenemos una gran cantidad de contenido, y también puedes hacer tus propias preguntas o resolver las de los demás.

Powered by:

X