
Ich habe eine Konfigurationsdatei config
und möchte cat
diese Datei. Manchmal config
existiert sie jedoch nicht. In diesem Fall möchte ich, dass mein Befehl einen Standardwert ausgibt.
Vielleicht etwas, das so funktioniert:
$ ls
$ cat config || echo 42
42
$ echo 73 > config
$ cat config || echo 42
73
Antwort1
Ihr Konstrukt ist in Ordnung. Sie könnten sogar so etwas tun wie
cat config || cat defaultconfig
Wenn Sie einen beliebigen Befehl verwenden (wie ./get_config_from_web
in Kommentaren), müssen Sie sicherstellen, dass der Befehl einen sinnvollen Rückgabestatus liefert. Das kann schwierig sein, Shell-Skripte geben nur das Ergebnis des zuletzt ausgeführten Befehls zurück. Sie müssen ein ausführen, exit
wenn Sie ein anderes Ergebnis wünschen.
Antwort2
Im Folgenden wird für alle nicht erfassten Fehlerzustände die Ausgabe 42 ausgegeben:
trap "echo 42" ERR
Sie können dies zu einer konfigurierbaren Variable machen:
trap 'echo "${CONFIG:=42}"' ERR # if $CONFIG is not set, it will be defaulted to 42
Antwort3
if [ -a config ]; then cat config; else echo ${DEFAULT};fi
vorausgesetzt, die Variable DEFAULT wurde zuvor auf einen Wert gesetzt.
Antwort4
Sie könnten den Exit-Code in einer if-Anweisung verwenden:
#!/bin/bash
cat config
if [[ "$?" -ne "0" ]]; then
echo "VALUE"
fi
Wenn der vorherige Befehl erfolgreich ist, wird er mit dem Wert „0“ beendet. Sie sagen ihm also, dass er bei jedem anderen Beenden (Fehler) das ausgibt, was im „VALUE“ steht.