Grundlagen von Linux und der Kommandozeile
Ein ausführbares Skript run.sh im aktuellen Verzeichnis ergibt bei Eingabe von „run.sh“ die Meldung „command not found“, lässt sich aber durch Eingabe von „./run.sh“ ausführen. Was ist der Grund?
- Arun.sh hat kein Ausführungsrecht, und nur mit vorangestelltem ./ lässt es sich auch ohne dieses Recht ausführen
- BEin Befehlsname ohne Schrägstrich wird nur in den Verzeichnissen der Umgebungsvariable PATH gesucht, und das aktuelle Verzeichnis gehört in der Regel nicht dazu
- CDas #!/bin/bash in der ersten Zeile von run.sh (Shebang) wird nur gelesen, wenn das Skript mit vorangestelltem ./ ausgeführt wird
Antwort und Erläuterung anzeigen
Antwort: B. Ein Befehlsname ohne Schrägstrich wird nur in den Verzeichnissen der Umgebungsvariable PATH gesucht, und das aktuelle Verzeichnis gehört in der Regel nicht dazu
Erhält die Shell einen Befehlsnamen ohne Schrägstrich, durchsucht sie der Reihe nach die Verzeichnisse, die in der Umgebungsvariable PATH durch Doppelpunkte getrennt aufgeführt sind (/usr/local/bin:/usr/bin usw.), und führt das Gefundene aus. Das aktuelle Verzeichnis wird in der Regel nicht in PATH aufgenommen, damit nicht versehentlich ein bösartiges Programm gleichen Namens ausgeführt wird, das an anderer Stelle abgelegt wurde. Schreibt man einen Pfad mit Schrägstrich wie ./run.sh, wird diese Datei direkt ausgeführt, ohne PATH zu durchsuchen. Das #!/bin/bash in der ersten Zeile (Shebang) legt unabhängig von der Startweise den Interpreter fest, der das Skript ausführt.
Weiter: 9 weitere Fragen zu Grundlagen von Linux und der Kommandozeile