30Jul
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