¿Por qué usar env en shebang?

19

¿Cuál es el propósito de utilizar #!/usr/bin/env <sh|bash|python>tinglado en comparación con #!/bin/bash, #!/bin/sho #!/usr/bin/python?

Tuminoide
fuente
44
Hay una buena respuesta aquí en lo que respecta a la utilización general de env.
Kevin Bowen

Respuestas:

11

Algunas personas pueden usar una pitón diferente (perl, etc.) que la del sistema. /usr/bin/env pythonejecutaría la versión configurada como la actual, posiblemente haciendo que el script sea más portátil.

Por otro lado, según se informa, algunos sistemas no tienen /usr/bin/env. Además, no se puede usar #!/usr/bin/env foo xcomo reemplazo de #!foo x, porque foo xse interpretará como un argumento único. Entonces, el valor del enfoque es discutible.

choroba
fuente
1
Configurado donde? Desde info coreutils 'env invocation'mi punto de vista, esta forma de llamada se asegura de que sea un binario externo en lugar de un shell incorporado, pero no hay indicación de cómo env pythonsería diferente python.
Tuminoide
44
Tu PATHprobablemente incluye /usr/local/binprimero. Si alguien ha instalado manualmente Python allí, envlo llamará, mientras que #!/usr/bin/pythonlo omitirá.
Robie Basak
2
virtualenves una herramienta bastante popular, e instala un ejecutable de Python en el directorio de trabajo. Necesitarías el envtruco para que funcione correctamente.
Flimm
2
@Tuminoid: tienes razón: env pythones lo mismo que python. Sin embargo, el problema es que no puedes escribir un shebang como #!python: debes especificar una ruta completa.
Andrea Corbellini