He notado que con bash
los scripts algunas personas usan un formato diferente.
el asuntoal que estoy acostumbrado a poner en la cima del mío.
¿Alguien puede simplificar la diferencia entre estos dos? Yo uso #!/bin/bash
ese todo el tiempo.
#!/bin/bash
#!/usr/bin/env bash
Respuesta1
Los #!/usr/bin/env bash
resultados en el script usando cualquier bash que se encuentre primero en $PATH
.
Si bien es común que bash esté ubicado en /bin/bash
. Hay casos en los que no lo es (diferentes sistemas operativos). Otro uso potencial es cuando hay varios shells bash instalados (la versión más reciente en una ubicación alternativa como /usr/local/bin/bash
).
Hacer #!/usr/bin/env bash
simplemente aprovecha un comportamiento de la env
utilidad.
La env
utilidad se utiliza normalmente para manipular el entorno al llamar a un programa (por ejemplo, env -i someprog
para limpiar el entorno). Sin embargo, al no proporcionar más argumentos que el programa a ejecutar, se ejecuta el programa especificado como se encuentra en $PATH
.
Tenga en cuenta que existen ventajas y desventajas al hacer esto.
Las ventajas son las mencionadas anteriormente, ya que hace que el script sea portátil si bash está instalado en una ubicación diferente o si /bin/bash
es demasiado antiguo para admitir las cosas que el script intenta hacer.
La desventaja es que puede obtener un comportamiento impredecible. Dado que está a merced del usuario $PATH
, puede resultar en que el script se ejecute con una versión de bash que tenga un comportamiento diferente al que espera el script.