staging.inyokaproject.org

Frage zu She-Bang-Zeile für Python

Status: Gelöst | Ubuntu-Version: Ubuntu 18.04 (Bionic Beaver)
Antworten |

DaniS

Anmeldungsdatum:
10. Februar 2020

Beiträge: Zähle...

Hallo zusammen, trotz längerer Recherche im Forum fand ich für folgendes Systemverhalten keine Erklärung:

Eingabe von

which python

liefert

/home/dani/anaconda3/bin/python

Alternativ habe ich die folgenden beiden She-Bang-Zeilen in Python-Skripten versucht:

#!/home/dani/anaconda3/bin/python
#!/usr/bin/env python

Ergebnis: Dem Aufruf eines Skripts muss immer ./ vorangestellt werden. Versuche ich den direkten Aufruf ohne Prefix ./ bekomme ich den Fehler

command not found

Eingabe von ./hello funktioniert, Eingabe von hello führt zum Fehler

Das Skript wurde mit "chmod u+x" ausführbar gemacht. $PATH habe ich temporär erweitert (Inline-Schreibweise, also für aktuelle Terminal-Session) um den Pfad "/home/dani/anaconda3/bin/python", ändert nichts.

Meine Frage: Was kann die Ursache dafür sein, dass sich ein Skript nicht ohne das Präfix ./ aufrufen lässt?

Vielen Dank vorab für eure Hilfe

seahawk1986

Anmeldungsdatum:
27. Oktober 2006

Beiträge: 11278

DaniS schrieb:

Meine Frage: Was kann die Ursache dafür sein, dass sich ein Skript nicht ohne das Präfix ./ aufrufen lässt?

Es liegt nicht im PATH (Lesematerial: https://medium.com/@jalendport/what-exactly-is-your-shell-path-2f076f02deb4)

user_unknown

Avatar von user_unknown

Anmeldungsdatum:
10. August 2005

Beiträge: 17630

DaniS schrieb:

$PATH habe ich temporär erweitert (Inline-Schreibweise, also für aktuelle Terminal-Session) um den Pfad "/home/dani/anaconda3/bin/python", ändert nichts.

Du hast den Pfad hoffentlich um /home/dani/anaconda3/bin erweitert, nicht um /home/dani/anaconda3/bin/python .

Aber um Deine Pythonscripte ohne relativen Pfad aufzurufen müssten diese selbst, wie seahawk1986 schreibt, im Pfad liegen. Oder Du rufst sie mit

1
python sample.py

auf.

DaniS

(Themenstarter)

Anmeldungsdatum:
10. Februar 2020

Beiträge: Zähle...

Hallo zusammen, vielen Dank für eure schnellen Antworten. Thema gelöst.

Mir war nicht klar, dass "./hello" schlicht die relative Adressierung ist um die Datei im aktuellen Verzeichnis anzusprechen. Das Skript-Verzeichnis habe ich zu $PATH hinzugefügt. Ergebnis wie gewünscht: Dann genügt die Angabe von "hello"

Für alle anderen mit ähnlichen Problemstellungen, hier noch ein empfehlenswerter Link bzgl. dreier Möglichkeiten $PATH zu pflegen (Inline / Internal / Public): https://www.youtube.com/watch?v=83RNosGS8fg

@user_unknown:

Du hast den Pfad hoffentlich um /home/dani/anaconda3/bin erweitert, nicht um /home/dani/anaconda3/bin/python.

Danke für den Hinweis, hatte tatsächlich fälschlicherweise auf /home/dani/anaconda3/bin/python erweitert.

rklm Team-Icon

Projektleitung

Anmeldungsdatum:
16. Oktober 2011

Beiträge: 13242

DaniS schrieb:

Eingabe von

which python

Tipp: im 21. Jahrhundert benutzt man type dafür. 😉

user_unknown

Avatar von user_unknown

Anmeldungsdatum:
10. August 2005

Beiträge: 17630

rklm schrieb:

DaniS schrieb:

Eingabe von

which python

Tipp: im 21. Jahrhundert benutzt man type dafür. 😉

Weil python auch ein shell-builtin sein könnte?

rklm Team-Icon

Projektleitung

Anmeldungsdatum:
16. Oktober 2011

Beiträge: 13242

user_unknown schrieb:

rklm schrieb:

Tipp: im 21. Jahrhundert benutzt man type dafür. 😉

Weil python auch ein shell-builtin sein könnte?

Einfach als Gewohnheit, weil man dann auch Shell-Funktionen und Aliase findet. Ist doch blöd, wenn man an der falschen Stelle sucht. type ist übrigens auch POSIX-Standard. Wenn man da seine Gewohnheit ändert, erhält man in mehr Situationen das richtige Ergebnis.

user_unknown

Avatar von user_unknown

Anmeldungsdatum:
10. August 2005

Beiträge: 17630

rklm schrieb:

user_unknown schrieb:

rklm schrieb:

Tipp: im 21. Jahrhundert benutzt man type dafür. 😉

Weil python auch ein shell-builtin sein könnte?

Einfach als Gewohnheit, weil man dann auch Shell-Funktionen und Aliase findet. Ist doch blöd, wenn man an der falschen Stelle sucht.

Python ist wohl in der Regel weder eine Shellfunktion, noch ein Alias - man sucht also mit which nicht an der falschen Stelle.

Wenn man da seine Gewohnheit ändert, erhält man in mehr Situationen das richtige Ergebnis.

Die von Dir empfohlene Gewohnheit hätte in der Situation gar nichts gebracht.

Von mir aus empfehle type, aber über solche Appelle an den Herdentrieb:

Tipp: im 21. Jahrhundert benutzt man type dafür. 😉

werde ich mich weiter aufregen. Übrigens gibt es type seit 1984, während which vom Ende der 70er stammt.

Antworten |