Ich habe den Eindruck, wenn ich die Zeile einbeziehe
#!/bin/bash
Am Anfang meiner Datei wird sie als Bash-Skript erkannt, das ich nur ausführen kann
file.sh
anstatt
sh file.sh
Aber in meinem Fall file.sh
gibt so etwas wie test.sh
gibt test.sh: command not found
. Warum ist das so?
AKTUALISIEREN
Ich merke, dass ich verwenden muss ./
. Aber ich dachte es wird trotzdem im aktuellen Verzeichnis aussehen?
./test.sh
\#!/bin/bash
beim Schreiben in Ihre Datei aufgenommen? Am Anfang sollte es keinen Backslash geben..
, dies wird jedoch nicht empfohlen.sh file.sh
und./file.sh
sind nicht gleich, wenn die erste Zeile ist#!/bin/bash
! Die richtige Methode zum Ausführen von Bash-Skripten ist die Verwendung vonbash file.sh
. Außerdem wird von der Verwendung der.sh
Erweiterung aufgrund der Verwirrung abgeraten ("es heißt .sh, also muss ichsh file.sh
richtig verwenden?")Antworten:
Zuerst müssen Sie sicherstellen, dass die Datei ausführbar ist:
chmod +x file.sh
Und um es dann auszuführen, müssen Sie es entweder in Ihren PATH einfügen, dh in eines der Verzeichnisse der Dateien, die das Betriebssystem sucht, wenn Sie nach Dateien suchen, mit denen Sie es finden können
echo $PATH
, oder Sie müssen Folgendes eingeben:./file.sh
Anstatt nur zu tippen
file.sh
.Sie können einfach eingeben
file.sh
, wenn es in Ihrem Pfad ist, was ich empfehle. Ein guter Ort ist in~/bin
. Erstellen Sie diesen Ordner, wenn er nicht vorhanden ist, und unter Ubuntu wird er Ihrem Pfad hinzugefügt, wenn Sie sich anmelden.quelle
Sie müssen es mit ./file.sh starten, da sich das aktuelle Verzeichnis nicht im PATH befindet.
Wenn dies nicht ausreicht, becaused verpasst, was Frabjous schon sagt, zu
chmod a+x
, sollten Sie Programme beginnen mit einem shebang beginnend#!/bin/bash
mitnicht
auch wenn sh eine symbolische Verknüpfung zu / bin / bash ist.
Die Shell überprüft, wie sie aufgerufen wurde, und kann aufgerufen werden
sh
, um in einem kompatiblen Modus zu handeln. Daher kann sie einige Bashismen nicht verarbeiten, die funktionieren würden, wenn sie als aufgerufen würdebash file.sh
.Das war nicht Ihr Problem, könnte aber eines werden, wenn Sie diese subtile Unterscheidung nicht kennen.
quelle