Was ist die beste Möglichkeit, eine Umleitung in Bash zu Test- und Debugging-Zwecken unter bestimmten Bedingungen durchzuführen?
In meinen Skripten füge ich eine Debug-Option hinzu, um zu zeigen, was bei einem Testlauf ohne Verarbeitung tatsächlich passiert wäre. Wenn die Debug-Option aktiviert ist, soll die DEBUG-Option eine Skriptzeile mit Umleitung wiedergeben, die die Umleitung effektiv wiedergibt und das Echo nicht umleitet . Ein Beispiel würde dies wahrscheinlich besser erklären:
In einem Skript, das einen mysqldump mit den ihm übergebenen args ausführt, möchte ich, dass die debug-Option den mysqldump-Befehl so anzeigt, wie er ohne die Option -d ausgeführt worden wäre.
[ "-d" = "$1" ] && DEBUG=echo
$DEBUG mysqldump -u"$user" -p"$pass" -h"$host" "$dbase" > $dbase.sql.dump
Wenn ich also DEBUG als "echo" ausgeben möchte, möchte ich NICHT zu "$ dbase.sql.dump" zurückkehren. Eigentlich möchte ich die Variablen ">" und "$ dbase" mit ".sql.dump" ausgeben "text. Wenn die Debug-Option nicht aktiviert ist, möchte ich den Befehl so ausführen, wie er ist.
Die set -x
und set -v
-Optionen sind hier nicht wirklich die Antwort, da das Debuggen wirklich nur eine Testausgabe- / Probelaufoption ist, die der Benutzer sehen kann und das Skript nicht wirklich debuggt, um Codierungsprobleme zu beheben.
quelle
run_or_echo($CMD)
Es ist die Funktion, die prüft-d
und entscheidet, ob sie wiedergegeben oder ausgeführt werden soll. Das ist tatsächlich eine Zeile weniger pro Befehl als in Ihrem ursprünglichen Skript. Wie auch immer, ich bin mir ziemlich sicher, dass Sie es nicht so machen können, wie Sie es wollen, da das>
zum Ausführen des Befehls verwendet werden muss und es ausgeblendet werden muss, wenn Sie es wiedergeben und Sie das Ganze nicht in Anführungszeichen setzen können, weil Bash Won Ich kann es nicht als Befehl erkennen. Ich sehe keinen Weg daran vorbei,>
ist einbash
Sonderzeichen und dein Drehbuch wird von interpretiertbash
.