Ubuntu Python shebang-Zeile nicht funktioniert
Keine shebang Zeile funktioniert in Ubuntu python-Skript. Bekomme ich nur ein "Befehl nicht gefunden" Fehler jedes mal.
test.py
#!/usr/bin/env python
print ('!')
Lief
:which python
/usr/bin/python
Gespielt, um mit verschiedenen Standorten für python in den Kram, aber kein Glück, einschließlich, was wurde durch die python. Irgendwelche Tipps, wie ich dies beheben?
Dank
Stellen Sie sicher, dass Ihre Linie enden sind unix
Ich habe die test-Datei in nano. Ich verwende in der Regel erhaben ist, aber das ist auf meinem server also einfach peitschte es bis in den nano. Ich habe ehrlich gesagt keine Ahnung, wie das anzeigen von speziellen Zeichen in nano. Ich bin einfach davon ausgegangen da ich es auf linux würde es die Handhabung der neuen Zeile entsprechend.
Wahrscheinlich ist es das unix-Zeilenumbrüche enthalten, dann ist die Datei ausführbar? (
es ist in der Tat. Nicht sicher, ob das hilft, aber wenn ich run (/usr/bin/python test.py) es läuft wie ein champ
Was bedeutet
\n
Zeilenumbrüche.Ich habe die test-Datei in nano. Ich verwende in der Regel erhaben ist, aber das ist auf meinem server also einfach peitschte es bis in den nano. Ich habe ehrlich gesagt keine Ahnung, wie das anzeigen von speziellen Zeichen in nano. Ich bin einfach davon ausgegangen da ich es auf linux würde es die Handhabung der neuen Zeile entsprechend.
Wahrscheinlich ist es das unix-Zeilenumbrüche enthalten, dann ist die Datei ausführbar? (
chmod +x scriptname.py
)es ist in der Tat. Nicht sicher, ob das hilft, aber wenn ich run (/usr/bin/python test.py) es läuft wie ein champ
Was bedeutet
file test.py
sagen?InformationsquelleAutor DrewK | 2013-02-11
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wenn Sie versuchen, den Befehl ausführen als
der Fehler kann nicht haben etwas zu tun mit der UMMANTELUNG. Vielmehr ist das Verzeichnis, das test.py wohnt nicht in Ihr
PATH
. Versuchenumgehen
PATH
lookup.(Dies ist neben der Herstellung sicher, dass das Skript selbst ausführbar ist.)
Wenn Ihr Befehl besteht aus einem einzigen Wort, die shell sucht Befehl in jedem Verzeichnis gespeichert
PATH
, beginnend mit der ersten, und mit dem ersten match, das er findet. Das aktuelle Verzeichnis (.) ist in der Regel nicht inPATH
, als könnte es ein Sicherheitsrisiko sein, so müssen Sie den genauen Pfad als./test.py
(die Dateitest.py
im aktuellen Verzeichnis).Nicht zu halten Fragen, aber warum ist der PFAD ein Sicherheitsrisiko?
hinzufügen des aktuellen Verzeichnisses PFAD wird als Sicherheitsrisiko angesehen, da ein Angreifer in der Lage sein, zu "überschreiben" standard-Befehle, indem Sie ein Skript in das aktuelle Verzeichnis. Stellen Sie sich eine benutzerdefinierte
ls
script, das wirkt genau wie normalels
Ausnahme keine anzeigen von Verzeichnissen genannt.evil-hidden-stuff
...Ich habe nie gesehen, wie er erklärte, auf diese Weise, aber ich denke, die Empfehlung vor setzen '.' in Ihrem
PATH
reichen würde, um jeden relativen Pfad. Die Idee ist, dass die lookups entsprechen sollte zu einem festen Satz von Verzeichnissen, die nicht abhängig von Ihrem aktuellen Arbeitsverzeichnis.InformationsquelleAutor chepner
Auf dem python - docs-Seite es sagt:
Ich weiß nicht, ob dies gilt oder nicht.
InformationsquelleAutor ajon
Abgesehen von der Ausführung des script mit einem vorangestellten Punkt oder machen Sie es ausführbar ist, könnte es ein weiteres Problem:
Wenn Sie versuchen, ein Skript geschrieben, mit einem windows-editor, es enthält die windows-Zeilenenden haben. Entfernen von diesen kann der Kram wieder funktioniert.
Entfernen Sie diese Zeile enden, beziehen sich auf Wie konvertieren von Windows-Zeilenende im Unix-Zeilenende (CR/LF auf LF) zum Beispiel.
Siehe auch meine Allgemeinen Bemerkungen über Fehler Kram Auswertungen bei meiner anderen Antwort.
InformationsquelleAutor DomTomCat
Stellen Sie sicher, dass die "ERSTE ZEILE" ist die UMMANTELUNG.
Geben Sie nicht jedem newline-Zeichen am Anfang der Datei.
"Keine newline-Zeichen in den Anfang"
InformationsquelleAutor Ruhil Jaiswal
Dies kann durch ein kernel-Fehlkonfiguration. Werfen Sie einen Blick auf Ihre kernel-config Optionen, und überprüfen Sie, ob
CONFIG_BINFMT_SCRIPT
festgelegt ist:Wenn Sie die Ausgabe dieses Befehls ist alles außer
CONFIG_BINFMT_SCRIPT=y
bedeutet dies, dass Ihr kernel können Sie nicht verwenden shebangs. Sie müssen sich einen neuen kernel oder kompilieren Sie Ihre aktuellen kernel mitCONFIG_BINFMT_SCRIPT=y
.InformationsquelleAutor user60561