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

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

Ich habe den Eindruck, dass wenn ich die Zeile einfüge

#!/bin/bash

am Anfang meiner Datei, wird es als Bash-Skript erkannt, das ich einfach ausführen kann

file.sh

anstatt

sh file.sh

Aber in meinem Fall file.shgibt es 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 gesucht?

./test.sh

Antwort1

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, also in eines der Dateiverzeichnisse, die das Betriebssystem durchsucht, wenn es nach auszuführenden Dateien sucht (Sie finden diese mit ), echo $PATHoder Sie müssen Folgendes eingeben:

./file.sh

Anstatt einfach nur einzugeben file.sh.

Sie können einfach eingeben file.sh, wenn es in Ihrem PATH 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.

Antwort2

Sie müssen es mit ./file.sh starten, da sich das aktuelle Verzeichnis nicht im PATH befindet.

Wenn dies nicht ausreicht, weil Sie verpasst haben, was frabjous vorschlägt, chmod a+xsollten Sie Programme beginnen, die mit einem Shebang beginnen #!/bin/bashmit

bash file.sh

nicht

sh file.sh

auch wenn sh ein symbolischer Link zu /bin/bash ist.

Die Shell prüft, wie sie aufgerufen wurde, und kann so aufgerufen werden, shdass sie in einem kompatiblen Modus agiert. Daher kann es sein, dass sie einige Bashismen nicht verarbeiten kann, was bei einem Aufruf als funktionieren würde bash file.sh.

Das war nicht Ihr Problem, könnte aber zu einem werden, wenn Sie diesen subtilen Unterschied nicht kennen.

verwandte Informationen