Was macht set -e?

28

Ich habe ein Skript gefunden und versuche, es zum Laufen zu bringen. Es lädt nur Apache-Laufzeitbibliotheken herunter und installiert sie. Die erste Zeile ist set -eund verursacht einen Fehler. Was bedeutet set -etun?

spuckfeuer
quelle

Antworten:

22

Dieser Einbau ist so kompliziert, dass er einen eigenen Abschnitt verdient.

Mit set können Sie die Werte von Shell-Optionen ändern und die Positionsparameter festlegen oder die Namen und Werte von Shell-Variablen anzeigen.

Die -eOption

-e

Beenden Sie sofort, wenn eine Pipeline (siehe Pipelines), die aus einem einzelnen einfachen Befehl (siehe Einfache Befehle), einem in Klammern gesetzten Subshell-Befehl (siehe Befehlsgruppierung) oder einem der Befehle besteht, die als Teil einer Befehlsliste von ausgeführt werden geschweifte Klammern (siehe Befehlsgruppierung) geben einen Status ungleich Null zurück. Die Shell wird nicht beendet, wenn der fehlgeschlagene Befehl Teil der Befehlsliste ist, die unmittelbar auf ein while- oder until-Schlüsselwort folgt, Teil des Tests in einer if-Anweisung ist, Teil eines Befehls, der in einem && oder || ausgeführt wird liste mit Ausnahme des Befehls, der auf das letzte && oder || folgt, jeden Befehl in einer Pipeline außer dem letzten, oder wenn der Rückgabestatus des Befehls mit! invertiert wird. Ein Trap auf ERR, falls gesetzt, wird ausgeführt, bevor die Shell beendet wird.

Diese Option gilt für die Shell-Umgebung und jede Subshell-Umgebung separat (siehe Command Execution Environment) und kann dazu führen, dass Subshells beendet werden, bevor alle Befehle in der Subshell ausgeführt werden.

Quelle: www.gnu.org

Bearbeitet aufgrund des Kommentars von @psusi unten.

Zusätzlich können Sie die Handbuchseite der Bash lesen

man bash 

im Abschnitt: SHELL BUILTIN COMMANDS

oder Problem

help set 

für eine kurze Hilfemeldung.

NickTux
quelle
1
Da es sich um einen eingebauten Befehl handelt, möchten Sie help setund das vollständige Bash-Handbuch ist info bash, wenn Sie Bash-Doc installiert haben.
Psusi
Danke für die Klarstellung @psusi. help setund / oder man bashsind die richtigen für set.
NickTux
12

set -e Kurz gesagt, wenn es oben in Ihrem Bash-Skript steht, wird das Skript angewiesen, zu beenden, sobald eine Zeile im Skript fehlschlägt (mit einigen im Handbuch aufgeführten Ausnahmen). [1]

Als Debugging-Option wird sie häufig verwendet set -x, um jede erweiterte Befehlszeile vor der Ausführung mit einem "+" - Zeichen zu drucken. [2]

Weitere Informationen finden Sie unter:

[1] https://www.peterbe.com/plog/set-ex

[2] http://tldp.org/LDP/Bash-Beginners-Guide/html/sect_02_03.html

Devy
quelle
2
Danke für die einfache Erklärung. Ich sehe oft set -xe in Dockerfiles und jetzt weiß ich den Grund :)
ymakux