Gibt es beim Ausführen eines Bash-Skripts im Linux-Terminal einen Unterschied zwischen " bash foo.sh
" und " ./foo.sh
"? Oder sind das einfach zwei verschiedene Möglichkeiten, dieselbe Funktion auszuführen?
Antwort1
Sie sind wahrscheinlich gleichwertig, wenn./foo.sh
- ist ausführbar und
- beginnt mit mit
#!/bin/bash
(oder gleichwertig)
Andernfalls und unter den von Ihnen beschriebenen Voraussetzungen ( foo.sh
ist ein Bash-Skript) ./foo.sh
kann die Version durchaus fehlschlagen, entweder weil sie keine Ausführungsberechtigung für den Benutzer hat oder weil sie von /bin/sh
statt von interpretiert wird /bin/bash
( /bin/sh
ist der Standard-Skriptinterpreter).
Antwort2
Zusätzlich zu Tobys Antwort möchte ich darauf hinweisen, dass man vorhandene Shebang-Bash-Parameter im Skript prüfen sollte (wie #!/bin/bash -e), bevor man einfach „bash foo.sh“ aufruft. Beim Aufrufen eines Skripts über „bash foo.sh“ werden vorhandene Bash-Parameter im Shebang nicht berücksichtigt.
Antwort3
Die Leute haben es hier bereits erklärt, aber in einfachen Worten bash foo.sh
bedeutet das, dass foo.sh in der Bash-Shell ausgeführt wird.
Auf diese Weise kann dem Kernel lediglich mitgeteilt werden, welches Shell-Skript zum Ausführen des Skripts verwendet werden soll, ohne dass Änderungen am Skript vorgenommen werden müssen.