Página principal » cómo » ¿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?

    Cuando creas un nuevo script de shell, quieres asegurarte 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 ti. 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, un grupo de sitios web de preguntas y respuestas impulsado por la comunidad..

    La pregunta

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

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

    Cuando es mejor usar #! / bin / bash en lugar de #! / bin / sh en un script de shell?

    La respuesta

    Grawity, el colaborador de SuperUser, tiene la respuesta para nosotros:

    En breve:

    • Hay varios shells que implementan un superconjunto de la especificación sh de POSIX. 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 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, no importa de qué shell sea.
    • Si comienza a usar las funciones específicas de bash (es decir, matrices), debe solicitar específicamente bash porque, incluso si / bin / sh ya invoca a bash en su sistema, puede que no esté en el sistema de todos los demás, y su 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. Guiones 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 / bin, o / usr / local / bin.
    • Una opción más confiable es #! / usr / bin / env bash, que utiliza $ PATH. Aunque la herramienta env en sí no 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? Apaga el sonido en los comentarios. ¿Quieres leer más respuestas de otros usuarios de Stack Exchange con experiencia en tecnología? Echa un vistazo a la discusión completa aquí.

    Crédito de la imagen: Wikipedia