En primer lugar, podría considerar simplemente reemplazar /bin/bash
con una versión más actualizada.
En segundo lugar, si no está cómodo anulando su garantía al hacer eso, y si ya tiene un problema con un script existente, omita su línea #!
invocándola como:
/usr/local/bin/bash /path/to/script.bash
args...
(Puedes usar bash
en lugar de /usr/local/bin/bash
si tu $PATH
está en el orden correcto)
En tercer lugar, si este script es específico para los dispositivos Apple y debe tener Bash versión 4, siempre configúrelo explícitamente en #!/usr/local/bin/bash
, ya que no hay ningún beneficio al configurarlo en otra cosa.
En cuarto lugar, considere usar enlace : tenga en cuenta que necesita la versión "fuente" del script para no estar en /usr/local/bin
; directamente en tu fuente de repo sería ideal.
Fuente vs Implementación
Su consulta sobre la configuración de la línea #!
en el repositorio de source resalta una falta de comprensión muy frecuente sobre los scripts: la idea de que un script, simplemente porque es "texto", no debería ser necesario "Preparado para usar" en cualquier sentido.
Para otros tipos de programas es obvio: tienen que ser compilados. Y si son scripts de Python o Perl grandes, necesitan un paquete o instalador que incluya las dependencias de cualquier módulo.
Pero incluso un script de shell necesita, como mínimo, tener su propiedad y permisos establecidos, y ser colocado en un directorio bin
. Por lo general, esto ocurre cuando se construye un paquete para una clase de dispositivo o cuando el script se instala en un dispositivo de destino. Este es también el momento adecuado para configurar la línea #!
para que coincida con el entorno de implementación.
Yo no recomiendo #!/usr/bin/env bash
La promoción generalizada de #!/usr/bin/env
debilita ligeramente la seguridad general, pero de una manera que no es probable que afecte a las personas que la escriben, solo a los usuarios en algún lugar del camino. Por lo tanto, no lo recomiendo; de hecho, predigo que con el tiempo volverá y morderá a sus clientes, a los clientes de sus clientes, oa los clientes de sus clientes ...
Se promueve como "portátil", pero eso no es realmente cierto: los dispositivos Android y OpenWRT ni siquiera tienen /usr
mucho menos /usr/bin/env
, por lo que es bastante inútil allí. Entonces, en la práctica, los principales beneficiarios son los usuarios de Apple.
Si la secuencia de comandos requiere una nueva versión de bash, entonces la versión del sistema simplemente no funcionará, por lo que no tiene sentido usarla como alternativa. Si no necesita la versión más reciente, está bien arreglarlo como / bin / bash.
En resumen, si está implementando un script en Apple que requiere Bash versión 4, debería usar #!/usr/local/bin/bash
, ya sea cuando compile el script en un paquete instalable, o cuando el script está instalado en un dispositivo en particular.