ubuntuusers.de

Bash: Bash-Skript im Einzelschrittmodus ablaufen lassen

Status: Gelöst | Ubuntu-Version: Ubuntu 19.04 (Disco Dingo)
Antworten |

ui

Anmeldungsdatum:
22. November 2008

Beiträge: 603

Ich möchte ein Bash-Skript im Einzelschrittmodus ablaufen lassen. bash -x reicht mir nicht. Idealerweise ohne integrierte Entwicklungsumgebung (IDE). IDEs ausschließen möchte ich des Komforts wegen dennoch nicht.

Das habe ich bisher gefunden:

  1. bashdb (ohne IDE)

  2. Plugin einer IDE (IDE=Visual Studio Code)

Welche würdet Ihr empfehlen? Andere?

frostschutz

Avatar von frostschutz

Anmeldungsdatum:
18. November 2010

Beiträge: 7782

Ich möchte ein Bash-Skript im Einzelschrittmodus ablaufen lassen. bash -x reicht mir nicht.

Kannst du das ein wenig ausführen?

Einzelschrittmodus für Arme Ritter:

#!/bin/bash

export PS4="\$(sleep 2)+"

set -x

date
date
date
date
date
date
$ ./script.sh 
+date
Mon 12 Aug 2019 12:40:00 PM CEST
+date
Mon 12 Aug 2019 12:40:02 PM CEST
+date
Mon 12 Aug 2019 12:40:04 PM CEST
+date
Mon 12 Aug 2019 12:40:06 PM CEST
+date
Mon 12 Aug 2019 12:40:08 PM CEST
+date
Mon 12 Aug 2019 12:40:10 PM CEST

Anstelle von "sleep 2" kann man da auch einen anderen Befehl einsetzen. Der darf nur möglichst keine Nebeneffekte haben (nicht von stdin lesen und ggf. auch nichts ausgeben).

Dummerweise wird der Prompt vor dem eigentlichen Befehl ausgegeben, also man sieht den nächsten Schritt nicht vorher. 😉

Und das hilft auch alles gar nichts wenn die Musik ausgelagert wird. Also wenn man z.B. mit awk stundenlang eine riesen Datei beackert ist das fürs Bash Script ggf. immer noch... nur ein Schritt.

rklm Team-Icon

Projektleitung

Anmeldungsdatum:
16. Oktober 2011

Beiträge: 13175

ui schrieb:

Ich möchte ein Bash-Skript im Einzelschrittmodus ablaufen lassen. bash -x reicht mir nicht.

Warum? Mir ist bisher kein Fall untergekommen, wo set -x, zusätzlich eingefügte Ausgaben oder ein zusätzlicher exit nicht geholfen hätten. frostschutz hat ja bereits auf die Probleme des Ansatzes hingewiesen.

ui

(Themenstarter)

Anmeldungsdatum:
22. November 2008

Beiträge: 603

Ich hab ein großes Bash-Skript das ich schrittweise auf korrekte Funktion überprüfen möchte.

In den IDEs bekannter Programmiersprachen lassen sich Programme dazu im Einzelschrittmodus ausführen. Mit einer speziellen Taste/Tastenkombination wird sich dann nach und nach durch das Programm von Befehl zu Befehl gehangelt.

Die Bash-Skripte ändern für den Debug-Prozess möchte ich eigentlich nicht. Mir schwebt eher vor ein Bash-Skript in einem Editor wie Vim zu öffnen und es von dort aus mit Hilfe eines Plugins schrittweise auszuführen. Kenne mich mit Vim nicht aus. Las aber gerade, dass es auch als IDE für Bash-Skripte genutzt werden kann.

Nachtrag:
Aus Vim wird auch nur bashdb aufgerufen (s. mein erstes Posting). Ich schaue mir daher mal bashdb an.

rklm Team-Icon

Projektleitung

Anmeldungsdatum:
16. Oktober 2011

Beiträge: 13175

ui schrieb:

Ich hab ein großes Bash-Skript das ich schrittweise auf korrekte Funktion überprüfen möchte.

Oha. Möglicherweise wäre es sinnvoll, das große Skript in kleinere funktionale Einheiten zu zerlegen, die dann einfacher getestet werden können. Generell sind Skripte ja eher für kleine Aufgaben gedacht. Programmieren würde man besser in einer anderen Sprache (z.B. Ruby oder Python), die dann auch entsprechende Mechanismen für das Debuggen bereithält.

In den IDEs bekannter Programmiersprachen lassen sich Programme dazu im Einzelschrittmodus ausführen. Mit einer speziellen Taste/Tastenkombination wird sich dann nach und nach durch das Programm von Befehl zu Befehl gehangelt.

Ist mir bekannt.

Die Bash-Skripte ändern für den Debug-Prozess möchte ich eigentlich nicht.

Meine Skripte fangen regelmäßig so an:

1
2
3
#!/bin/sh

test -z "$DEBUG" || set -x

Dann kann man durch Setzen der Umgebungsvariable das Debugging einschalten. Das schöne ist, das funktioniert dann auch über mehrere Skripte hinweg. Die Variable kann man auch ganz einfach beim Aufruf setzten - das ist ein recht unbekanntes Feature:

1
$ DEBUG=x das-skript arg1 arg2

Nach dem Aufruf ist DEBUG wieder auf dem vorherigen Wert oder ungesetzt.

Aus Vim wird auch nur bashdb aufgerufen (s. mein erstes Posting). Ich schaue mir daher mal bashdb an.

Erzähl doch mal, wie gut bashdb funktioniert.

snafu1

Avatar von snafu1

Anmeldungsdatum:
5. September 2007

Beiträge: 2133

Wohnort: Gelsenkirchen

rklm schrieb:

Die Variable kann man auch ganz einfach beim Aufruf setzten - das ist ein recht unbekanntes Feature:

1
$ DEBUG=x das-skript arg1 arg2

Findest du? In der Form LANG=C befehl habe ich das schon häufiger gesehen...

Bearbeitet von rklm:

Zitat repariert

Antworten |