30Jul

Cuándo es mejor usar #!/bin/ bash ¡En vez de #!/bin/ sh en un script de Shell?

Cuando está creando un nuevo script de shell, quiere asegurarse de que sea lo más libre de problemas posible, pero a veces puede ser un poco confuso saber qué shebang es el mejor para su uso. En ese sentido, la publicación SuperUser Q & A de hoy tiene la respuesta a una pregunta confusa del lector.

Pregunta de hoy &La sesión de respuesta nos llega por cortesía de SuperUser, una subdivisión de Stack Exchange, una agrupación de sitios web Q & A dirigida por la comunidad.

El lector

SuperUser de la Pregunta 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 en lugar de #!/bin/ sh en un script de shell?

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

La Respuesta

SuperUser contribuidor grawity tiene la respuesta para nosotros:

En resumen:

  • Hay varios shells que implementan un superconjunto de la especificación POSIX sh. En diferentes sistemas, /bin/ sh podría ser un enlace a ash, bash, dash, ksh, zsh, etc. Sin embargo, siempre será compatible con sh, nunca con csh o fish.
  • ¡Siempre y cuando se adhiera a las características sh solamente, puede( y probablemente incluso debería) usar #!/bin/ sh y la secuencia de comandos debería funcionar bien, sin importar qué shell sea.
  • Si comienza a usar características específicas de bash( es decir, matrices), debe solicitar específicamente bash porque, incluso si /bin/ sh ya invoca bash en su sistema, podría no funcionar en el sistema de todos los demás y su secuencia de comandos no se ejecutará allí.Lo mismo se aplica a zsh y ksh, por supuesto.
  • Incluso si la secuencia de comandos es solo para uso personal, es posible que observe 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.¡Guiones que usaban bashisms pero tenían #!/bin/ sh se rompió de repente.

Sin embargo:

  • Incluso #!/bin/ bash no es tan correcto. En sistemas diferentes, bash podría vivir en /usr/ bin , /usr/pkg/ bin , o /usr/local/ bin .
  • ¡Una opción más confiable es #!/usr/bin/ env bash , que utiliza $ PATH .Aunque la herramienta env tampoco está estrictamente garantizada, /usr/bin/ env aún funciona en más sistemas que /bin/ bash .

¿Tiene 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