2009-02-05 4 views
5

Ich suchte Google aber konnte keine Antwort auf diese eher einfache Frage finden. Ich habe einen Python-Skript, das die Hash-Bang in der ersten Zeile hat (#!):Bevorzugter Weg von #! in Shell-Skripte

#!/usr/bin/python 

Was aber, wenn diese auf einem Computer mit Python in/ist/python oder/usr/local ausgeführt wird/bin/python oder ein anderer Ort? Es muss einen besseren Weg geben, den Interpreter für ein Shell-Skript zu setzen. Es sollte möglich sein, es über $ PATH zu setzen, da dieser weiß, wo Python zu finden ist, wenn es auf dem System installiert ist.

Antwort

12

Verwendung env.

#!/usr/bin/env python 

Es ist nicht kugelsicher, aber es deckt mehr Fälle ab als/usr/bin/python.

+0

Ich wusste nicht env das tat! Dies stellt jedoch ein geringes Sicherheitsrisiko dar. Ein böswilliger Benutzer kann seinen eigenen Binärcode in ./python ablegen und Aktionen als Zielbenutzer ausführen, wenn ein Benutzer mit dem Status "." in ihrem $ PATH führt ein Python-Skript mit dieser Hash-Bang-Zeile aus. –

+0

Suchen PATH für Ihre Binärdateien ist normal. Das Problem in Ihrem Szenario ist, dass der Benutzer "." in ihrem Pfad, nicht, dass sie die PATH-Shell-Builds verwenden, um Befehle auszuführen. –

+0

@Phil: Im Prinzip stimme ich zu, dass das Problem mit $ PATH ist, aber in der Praxis, wenn Benutzer diesen Fehler häufig machen, ist es in gewisser Weise unverantwortlich, sie zu ignorieren. –

4

Verwenden

#!/usr/bin/env python 

env ist praktisch immer in /usr/bin und wird jedes Programm in der PATH auszuführen.

3

bevorzugen Manche Menschen mit zu beginnen:

#!/usr/bin/env python 

nicht sicher, dass dies eine große Verbesserung ist, wie Sie jetzt, dass Python ist auf dem Weg der Annahme und dass es die richtige Version, aber es ist eine Option.

Verwandte Themen