2009-02-05 26 views
5

Busqué en google pero no pude encontrar una respuesta a esta pregunta bastante simple. Tengo un script en Python que tiene el hash-bang en la primera línea (#!):Forma preferida de #! en scripts de shell

#!/usr/bin/python 

Sin embargo, lo que si esto se ejecuta en un ordenador con el pitón en/bin/python o/usr/local/bin/python, o algún otro lugar? Tiene que haber una mejor manera de configurar el intérprete para un script de shell. Debería ser posible establecerlo a través de $ PATH, ya que sabrá dónde encontrar Python si está instalado en el sistema.

Respuesta

12

Usar env.

#!/usr/bin/env python 

No es a prueba de balas, pero cubre más casos que/usr/bin/python.

+0

¡No sabía que env hiciera eso! Sin embargo, este es un riesgo de seguridad menor: un usuario malintencionado puede colocar su propio código binario en ./python y ejecutar acciones como el usuario de destino cada vez que un usuario tiene "." en $ $ PATH ejecuta un script Python con esta línea hash-bang. –

+0

La búsqueda de PATH para sus binarios es normal. El problema en su escenario es que el usuario tiene "." en su camino, no es que estén utilizando la ruta de acceso incorporada del shell para ejecutar comandos. –

+0

@Phil: En principio, estoy de acuerdo en que el problema es con $ PATH, pero en la práctica, si los usuarios comúnmente cometen este error, en cierta medida es irresponsable ignorarlo. –

4

Uso

#!/usr/bin/env python 

env es casi siempre en /usr/bin, y ejecutar cualquier programa en el PATH.

3

Algunas personas prefieren comenzar con:

#!/usr/bin/env python 

No estoy seguro de que esta es una gran mejora a medida que ahora está asumiendo que pitón está en el camino y que es la versión correcta, pero es una opción.

Cuestiones relacionadas