/ / / ¿Cuándo es mejor usar #! / Bin / bash en lugar de #! / Bin / sh en un script de Shell?

¿Cuándo es mejor usar #! / Bin / bash en lugar de #! / Bin / sh en un script de Shell?

cuándo-es-mejor-usar-bin-bash-lugar-de-bin-sh-in-a-shell-script-00

Cuando está creando un nuevo script de shell, ustedqueremos asegurarnos de que esté lo más libre de problemas posible, pero a veces puede ser un poco confuso saber qué shebang es el mejor para usted. En esa nota, la publicación de preguntas y respuestas de SuperUser de hoy tiene la respuesta a una pregunta confusa del lector.

La sesión de preguntas y respuestas de hoy nos llega por cortesía de SuperUser, una subdivisión de Stack Exchange, una agrupación de sitios web de preguntas y respuestas dirigida por la comunidad.

La pregunta

El lector SuperUser Hendre quiere saber cuándo es mejor usar #! / bin / bash en lugar de #! / bin / sh en scripts de shell:

¿Cuándo es más apropiado usar #! / bin / bash más bien que #! / bin / sh en un script de shell?

¿Cuándo es mejor usar #! / bin / bash en lugar de #! / bin / sh en un script de shell?

La respuesta

La contribución de SuperUser grawity tiene la respuesta para nosotros:

En breve:

  • Hay varios shells que implementan un superconjunto de la especificación POSIX sh. En diferentes sistemas, / bin / sh puede ser un enlace a ash, bash, dash, ksh, zsh, etc. Sin embargo, siempre será compatible con sh, nunca csh o fish.
  • Siempre y cuando se limite a las funciones sh solamente, puede (y probablemente incluso debería) usar #! / bin / sh y el script debería funcionar bien, sin importar qué shell sea.
  • Si comienza a usar funciones específicas de bash (es decir, matrices), debe solicitar específicamente bash porque, incluso si / bin / sh ya invoca bash en tu sistema, puede que no esté en el sistema de todos los demás y tu script no se ejecutará allí. Lo mismo se aplica a zsh y ksh, por supuesto.
  • Incluso si el script es solo para uso personal, puede notar que algunos sistemas operativos cambian / bin / sh durante las actualizaciones. Por ejemplo, en Debian solía ser bash, pero luego fue reemplazado por el guión mínimo. Scripts que usaban bashismos pero tenían #! / bin / sh De repente se rompió.

Sin embargo:

  • Incluso #! / bin / bash No es eso correcto. En diferentes sistemas, bash podría vivir en / usr / bin, / usr / pkg / bino / usr / local / bin.
  • Una opción más confiable es #! / usr / bin / env bash, que utiliza $ RUTA. Aunque la herramienta env en sí tampoco está estrictamente garantizada, / usr / bin / env todavía funciona en más sistemas que / bin / bash hace.

¿Tienes algo que agregar a la explicación? Suena apagado en los comentarios. ¿Desea leer más respuestas de otros usuarios de Stack Exchange expertos en tecnología? Mira el hilo de discusión completo aquí.

Crédito de imagen: Wikipedia