.sh-Dateien erfordern `sh app.sh` auch mit der Zeile` #! / bin / bash`

7

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.shgibt so etwas wie test.shgibt 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
Jiew Meng
quelle
2
Haben Sie \#!/bin/bashbeim Schreiben in Ihre Datei aufgenommen? Am Anfang sollte es keinen Backslash geben.
NN
Nono das ist ein Tippfehler ... siehe auch Update
Jiew Meng
1
Nein, es funktioniert nicht im aktuellen Verzeichnis, es sei denn, das aktuelle Verzeichnis befindet sich in Ihrem PATH. Sie können Ihren PFAD so bearbeiten, dass er immer das aktuelle Verzeichnis enthält ., dies wird jedoch nicht empfohlen.
Frabjous
4
sh file.shund ./file.shsind nicht gleich, wenn die erste Zeile ist #!/bin/bash! Die richtige Methode zum Ausführen von Bash-Skripten ist die Verwendung von bash file.sh. Außerdem wird von der Verwendung der .shErweiterung aufgrund der Verwirrung abgeraten ("es heißt .sh, also muss ich sh file.shrichtig verwenden?")
Lekensteyn

Antworten:

13

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.

frabjous
quelle
5

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/bashmit

bash file.sh

nicht

sh file.sh

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ürde bash file.sh.

Das war nicht Ihr Problem, könnte aber eines werden, wenn Sie diese subtile Unterscheidung nicht kennen.

Benutzer unbekannt
quelle