¿Cuál es la diferencia en estos dos entornos bash?

¿Cuál es la diferencia en estos dos entornos bash?

He notado que con bashlos 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/bashese todo el tiempo.

#!/bin/bash
#!/usr/bin/env bash

Respuesta1

Los #!/usr/bin/env bashresultados 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 bashsimplemente aprovecha un comportamiento de la envutilidad.
La envutilidad se utiliza normalmente para manipular el entorno al llamar a un programa (por ejemplo, env -i someprogpara 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/bashes 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.

información relacionada