Lo he visto en varios lugares, incluidas las recomendaciones en este sitio ( ¿Cuál es el Bash shebang preferido? ), Para usar #!/usr/bin/env bash
con preferencia #!/bin/bash
. Incluso he visto a una persona emprendedora sugerir que el uso #!/bin/bash
era incorrecto y que la funcionalidad bash se perdería al hacerlo.
Dicho todo esto, uso bash en un entorno de prueba estrictamente controlado donde cada unidad en circulación es esencialmente un clon de una sola unidad maestra. Entiendo el argumento de la portabilidad, aunque no es necesariamente aplicable en mi caso. ¿Hay alguna otra razón para preferir #!/usr/bin/env bash
a las alternativas y, suponiendo que la portabilidad fuera una preocupación, hay alguna razón para usarla que podría romper la funcionalidad?
env
posible que no se encuentre en /usr/bin
. Los comentarios de Shebang son una mala idea en mi humilde opinión. Si su intérprete de script predeterminado no maneja los comentarios shebang, es solo un comentario. Sin embargo, si sabe que el intérprete de guiones puede manejar comentarios shebang, y conoce la ruta de acceso a bash, no hay razón para no invocarlo usando su ruta absoluta a menos que la ruta sea demasiado larga (poco probable), o posiblemente pueda portar el guión a un sistema que no tiene bash ubicado en / bin. Por otra parte, las advertencias que mencioné anteriormente se aplican en ese caso ya que implica portabilidad.
/etc
o /bin/sh
. bash
es un complemento para la mayoría de los sistemas tipo Unix. Es solo Linux donde bash
está garantizado estar /bin
y muy probablemente también vinculado como /bin/sh
. Desde que Linux se convirtió en el Unix moderno de facto para muchas personas, se ha olvidado el hecho de que podrían existir sistemas distintos de Linux. En mi propia respuesta a continuación, asumí Linux porque dijiste bash
. Muchas de las cajas BSD con las que he trabajado ni siquiera lo tenían instalado.
/bin/bash
. Bash no está instalado por defecto. Si lo quieres, tienes que hacerlo pkg install bash
. Una vez instalado, se encuentra en /usr/local/bin/bash
. No hay nada instalado en /bin/bash
OpenBSD. Un shebang de #!/bin/bash
error de voluntad y #!/usr/bin/env bash
tendrá éxito.