2009-02-05 21 views
5

Ho cercato su google ma non sono riuscito a trovare una risposta a questa domanda piuttosto semplice. Ho uno script python che ha l'hash-bang sulla prima riga (#!):modo preferito di #! negli script di shell

#!/usr/bin/python 

Tuttavia, se questo viene eseguito su un computer con Python in/bin/python o/usr/local/bin/python o qualche altro posto? Deve esserci un modo migliore per impostare l'interprete per uno script di shell. Dovrebbe essere possibile impostarlo tramite $ PATH, in quanto saprà dove trovare python se è installato sul sistema.

risposta

12

Utilizzare env.

#!/usr/bin/env python 

Non è a prova di proiettile, ma copre più casi di/usr/bin/python.

+0

Non sapevo che l'ENV l'avesse fatto! Ma questo è un piccolo rischio per la sicurezza: un utente malintenzionato può inserire il proprio codice binario in ./python ed eseguire azioni come utente di destinazione ogni volta che un utente ha "." nel loro $ PATH esegue uno script Python con questa linea hash-bang. –

+0

La ricerca di PATH per i file binari è normale. Il problema nel tuo scenario è che l'utente ha "." nel loro percorso, non che stanno usando il PATH built-in della shell per eseguire i comandi. –

+0

@Phil: In linea di principio sono d'accordo che il problema è con $ PATH, ma in pratica, se gli utenti fanno comunemente questo errore, è in qualche modo irresponsabile ignorarlo. –

4

Usa

#!/usr/bin/env python 

env è praticamente sempre in /usr/bin, e sarà eseguire qualsiasi programma nel PATH.

3

Alcune persone preferiscono iniziare con:

#!/usr/bin/env python 

Non sono sicuro che questo è un grande miglioramento, come si sta ora assumendo che pitone è nel percorso e che è la versione giusta, ma è un'opzione.