Gibt es im Linux-Terminal einen Unterschied zwischen „bash foo.sh“ und „./foo.sh“?

Gibt es im Linux-Terminal einen Unterschied zwischen „bash foo.sh“ und „./foo.sh“?

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

  1. ist ausführbar und
  2. beginnt mit mit #!/bin/bash(oder gleichwertig)

Andernfalls und unter den von Ihnen beschriebenen Voraussetzungen ( foo.shist ein Bash-Skript) ./foo.shkann die Version durchaus fehlschlagen, entweder weil sie keine Ausführungsberechtigung für den Benutzer hat oder weil sie von /bin/shstatt von interpretiert wird /bin/bash( /bin/shist 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.shbedeutet 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.

verwandte Informationen