Bash-Set in Fisch
In diesem Artikel werden wir lernen, set -e
, set -u
und set -x
in der Fish-Shell zu bashen.
Bash set -x
Der Befehl set -x
wird zum Debuggen von Bash-Skripten verwendet, indem jede ausgeführte Anweisung zu Debugging- und Fehlerbehebungszwecken an die Shell ausgegeben wird. Der Befehl set -x
kann direkt in einer interaktiven Bash-Shell oder innerhalb eines Bash-Skripts ausgeführt werden.
Der Befehl set -x
platziert typischerweise die Initialisierung der Bash-Shell nach dem sh-bang
.
Wir aktivieren das Debugging in diesem Beispiel mit dem Befehl set -x
. Standardmäßig ist das Debuggen in Bash deaktiviert.
Stattdessen wird jede Anweisung an das Bash-Terminal ausgegeben, gefolgt von den Ergebnissen der Anweisung, um die Überprüfung zu erleichtern. Zum Beispiel wird das echo "The First Tree"
zuerst geschrieben, gefolgt von seinem Ergebnis.
Außerdem beginnen debuggte Anweisungen mit einem Pluszeichen.
#!/bin/bash
set -x
echo " The First Tree"
echo "The Second Tree"
Ausgabe:
+ echo ' The First Tree'
The First Tree
+ echo 'The Second Tree'
The Second Tree
Bash set -e
Der Befehl set -e
kann verwendet werden, um die Ausführung eines Skripts oder einer Funktion zu stoppen und einen Fehlercode ungleich Null zurückzugeben, wenn wir uns auf die Ausführung des Skripts oder der Funktion verlassen und genaue Informationen über das Ergebnis wünschen.
Standardmäßig geben Bash-Funktionen und -Skripte 0 zurück, wenn ihre Ausführung korrekt und ohne Fehler abgeschlossen wird. Wenn jedoch ein Problem auftritt, bietet ein Fehlercode spezifische Details zum Fehler.
Im folgenden Beispiel konfigurieren wir exit, wenn am Anfang des Skripts ein Fehler auftritt. Da keine Root-Berechtigung vorhanden ist, gibt mkdir /root/test
einen Fehler zurück und das Verzeichnis kann nicht erstellt werden.
Somit kann nun die Zeile echo "Progress..."
ausgeführt und auf dem Terminal angezeigt werden.
#!/bin/bash
set -e
mkdir /root/test
echo "Progress..."
Bash set -u
Der Befehl set-u
weist die Bash-Shell an, nicht gesetzte Variablen als Fehler zu interpretieren und sofort zu beenden. Damit kommen wir dem Verhalten fortgeschrittener Sprachen erheblich näher.
Der Befehl set -u
kann Fehler bei unbenutzten Bash-Variablen verhindern und anzeigen.
Beispiel:
#!/bin/bash
firstName="Jackie"
fullName="$firstname John"
echo "$fullName"
Bitte beziehen Sie sich auf das vorherige Beispiel. Siehst du den Fehler?
Auf der rechten Seite der dritten Zeile erscheint das Wort Vorname
in Kleinbuchstaben statt in Kamelbuchstaben. Ohne die Option -u
würde dieser Fehler nicht angezeigt werden.
Mit der Option -u
wird das Skript jedoch in dieser Zeile mit dem Exit-Code 1
beendet, und die Meldung "firstname: unbound variable"
wird auf stderr
ausgegeben.
Im Allgemeinen möchten wir, dass es explizit und sofort fehlschlägt, anstatt subtile Fehler zu erstellen, die möglicherweise erst viel später gefunden werden.
Befehl für Fish Shell
set fish_trace 1 # display the expanded command line before execution
set fish_trace 2 # prepend file and line number to the command line
set fish_trace 1 1 # print the command line before execution and the exit status following execution.
set fish_trace 1 2 # as above, except print the exit status of all subprocesses (?)
set fish_trace 0 1 # print command-line exit status
Diese Optionen wie set -u
, set -e
und set -x
gibt es in Fish nicht. Es gibt keine dedizierte Syntax zum Setzen von Variablen in Fish.
Stattdessen verwendet es einen Standardbefehl: set
, der einen Variablennamen und seinen Wert akzeptiert. Werden sowohl eine Variable als auch Werte übergeben, weist das set
die Werte der Variablen mit dem angegebenen Namen zu.
Mehrere Werte sind zulässig, da alle Variablen in Fish Listen sind.