¿Cuál es el propósito de utilizar #!/usr/bin/env <sh|bash|python>
tinglado en comparación con #!/bin/bash
, #!/bin/sh
o #!/usr/bin/python
?
command-line
bash
environment
Tuminoide
fuente
fuente
Respuestas:
Algunas personas pueden usar una pitón diferente (perl, etc.) que la del sistema.
/usr/bin/env python
ejecutarí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 x
como reemplazo de#!foo x
, porquefoo x
se interpretará como un argumento único. Entonces, el valor del enfoque es discutible.fuente
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ómoenv python
sería diferentepython
.PATH
probablemente incluye/usr/local/bin
primero. Si alguien ha instalado manualmente Python allí,env
lo llamará, mientras que#!/usr/bin/python
lo omitirá.virtualenv
es una herramienta bastante popular, e instala un ejecutable de Python en el directorio de trabajo. Necesitarías elenv
truco para que funcione correctamente.env python
es lo mismo quepython
. Sin embargo, el problema es que no puedes escribir un shebang como#!python
: debes especificar una ruta completa.