Debuggen von Bash-SkriptenDie Debug-OptionenZum Debuggen der Bash stehen zwei Optionen zur Verfügung: -v gibt jede Zeile vor dem Ausführen nochmals aus. -x schaltet den eigentlichen Debug-Modus ein. Wie bei -v auch, wird bei -x jede Zeile vor dem Ausführen nochmals angezeigt. Im Unterschied zu -v wird allerdings exakt der Befehl ausgegeben, der auch ausgeführt wird, sprich es werden Variablen, Alias-Befehle und dergleichen mehr ersetzt. Im folgenden Beispiel wird der Befehl cd $HOME verwendet. $HOME ist eine Environment-Variable,
in welcher das Home-Verzeichnis des jeweiligen Benutzers gespeichert ist.Ist -v eingeschaltet, gibt der Befehl folgende Zeile aus: cd $HOME Ist -x eingeschaltet, gibt der Befehl folgende Zeile aus: + cd /home/linux Sind -v und -x eingeschaltet, wird Folgendes ausgegeben: cd $HOME Noch eine Anmerkung: Wie bei der Option -x zu sehen ist, wird am Anfang der Zeile ein + mit ausgegeben, es können aber auch mehrere + ausgegeben werden, wie z.B. ++ oder +++. Dies ist vor allem in größeren Skripten von Bedeutung, welche auch andere Skripte aufrufen. Bei Befehlen vom ersten Skript wird immer ein + verwendet. Das nächste aufgrufene Skript erhält ++ usw. Somit kann man leicher erkennen, in welchem Skript die gerade ausgeführte Zeile steht. Anwendung der Debug-OptionenUm die Optionen -v und -x anzuwenden gibt es zwei Möglichkeiten: Die eine ist der Befehl set . Durch set -vx werden -v und -x eingeschaltet, durch
set +vx wieder ausgeschaltet. Wird set in der Bash eingegeben, werden
allerdings nur die eingegebenen Kommandos ge-debugged, Skripte nicht.
Dazu muss dieser Befehl explizit im Skript angegeben werden, effektiv an erster Stelle,
da erst ab diesem Befehl das Debuggen beginnt. Eine andere Möglichkeit ist, das Skript mit folgendem Befehl aufzurufen: sh -vx <Skriptname> . Dadurch werden das Skript und teilweisse
auch vom Skript aufgerufene Skripte in den Debug-Modus versetzt.MitprotokollierenUm die Ausgaben in einem Logfile zu protokollieren, verwende ich folgenden Befehl: sh -vx "Skriptname" 2>&1 | tee logfile.log .Eine kurze Warnung am Rande: logfile.log wird überschrieben. Alle darin enthaltenen Informationen gehen verloren. Will man die Ausgabe an dem Logfile anhängen, so muss der Befehl folgendermaßen lauten: sh -vx "Skriptname" 2>&1 | tee -a logfile.log .Der Befehl im einzelnen: Mit sh -vx "Skriptname" wird das Skript in den
Debug-Modus versetzt und ausgeführt. Die Anführungszeichen sind
deshalb notwendig, damit sich der Rest des Befehles auch auf die
Debug-Ausgaben bezieht und nicht nur auf die Ausgaben vom Skript selbst. 2>&1 leitet die Fehlerausgabe (2) in die Standardausgabe (1) um.| tee [-a] logfile.log leitet nun die Standardausgabe nach tee um. tee ist ein
Programm, welches in diesem Fall die Daten auf dem Monitor ausgibt und gleichzeitig
in einem Logfile speichert.Ich hoffe, Euch mit diesem kurzem Artikel ein wenig geholfen zu haben. Ich muss dazu sagen, dass dieser Artikel fast ausschließlich auf eigenen Erfahrungen beruht. Somit bin ich für Ergänzungen, Fehler und Kommentare jederzeit offen. Zögert nicht damit ;-) (c) 2003 by String Val, www.linux-related.de
|