Erstellen Sie einen Fortschrittsbalken in Bash

Olorunfemi Akinlua 20 Juni 2023
  1. Verwenden Sie den Befehl pv, um einen Fortschrittsbalken in Bash zu erstellen
  2. Verwenden Sie den Befehl dialog, um einen Fortschrittsbalken in Bash zu erstellen
  3. Verwenden Sie die ncurses-Bibliothek, um einen Fortschrittsbalken in Bash zu erstellen
Erstellen Sie einen Fortschrittsbalken in Bash

Ein Fortschrittsbalken ist ein visueller Indikator, der den Fortschritt einer Aufgabe anzeigt, z. B. eines lang andauernden Skripts oder Befehls. Es kann nützlich sein, um dem Benutzer Feedback zum Status der Aufgabe zu geben, und es kann auch helfen, die verbleibende Zeit bis zum Abschluss der Aufgabe abzuschätzen.

In diesem Artikel werden verschiedene Ansätze zum Hinzufügen eines Fortschrittsbalkens zu einem Shell-Skript in Bash, der Standard-Shell für Linux und macOS, untersucht.

Verwenden Sie den Befehl pv, um einen Fortschrittsbalken in Bash zu erstellen

Eine der einfachsten Möglichkeiten, einem Shell-Skript einen Fortschrittsbalken hinzuzufügen, ist die Verwendung des Befehls pv, der für Pipe Viewer steht. Dieser Befehl ermöglicht die Überwachung des Fortschritts von Daten, die durch eine Pipe geleitet werden, was zur Anzeige eines Fortschrittsbalkens im Terminal verwendet werden kann.

Um beispielsweise einem Skript, das eine große Datei von einem Speicherort an einen anderen kopiert, einen Fortschrittsbalken hinzuzufügen, können Sie den folgenden Befehl verwenden:

cat file.txt | pv -s $(stat -c%s file.txt) > /destination/file.txt

Dieser Befehl verwendet cat, um den Inhalt der Datei file.txt zu lesen, und leitet die Ausgabe an den Befehl pv weiter. Der Befehl pv verwendet die Option -s, um die Eingangsdatengröße in Bytes anzugeben und berechnet den Fortschritt basierend auf diesem Wert.

Die Ausgabe des pv-Befehls wird dann auf die Zieldatei umgeleitet.

Wenn das Skript ausgeführt wird, zeigt der Befehl pv einen Fortschrittsbalken im Terminal an, der den Prozentsatz der kopierten Datei und die geschätzte verbleibende Zeit bis zum Abschluss der Aufgabe anzeigt. Der Fortschrittsbalken wird dynamisch aktualisiert, während die Daten übertragen werden, und verschwindet, wenn die Aufgabe abgeschlossen ist.

Verwenden Sie den Befehl dialog, um einen Fortschrittsbalken in Bash zu erstellen

Ein weiterer Ansatz zum Hinzufügen eines Fortschrittsbalkens zu einem Shell-Skript besteht darin, den Befehl dialog zu verwenden, ein Dienstprogramm zum Erstellen benutzerfreundlicher Schnittstellen im Terminal. Der Befehl dialog kann verschiedene Widgets anzeigen, darunter einen Fortschrittsbalken, und er kann über das Skript gesteuert werden, um den aktuellen Fortschritt der Aufgabe anzuzeigen.

Um den Befehl dialog zum Hinzufügen eines Fortschrittsbalkens zu einem Shell-Skript zu verwenden, können Sie die Option --gauge verwenden, um ein neues Fortschrittsbalken-Widget zu erstellen. Die Option --gauge akzeptiert mehrere Argumente, darunter den Titel des Widgets, die Höhe und Breite des Widgets und den Anfangswert des Fortschrittsbalkens.

Hier ist ein Beispiel für die Verwendung der Option --gauge, um einen Fortschrittsbalken mit dem Titel Copying file und einem Anfangswert von 0 zu erstellen:

dialog --gauge "Copying file" 10 70 0

Dieser Befehl erstellt ein Fortschrittsbalken-Widget mit einer Höhe von 10 Zeilen und einer Breite von 70 Zeichen und zeigt den Titel Copying file oben im Widget an. Der Fortschrittsbalken ist zunächst leer und hat den Wert 0.

Um den Fortschritt der Aufgabe und den Wert des Fortschrittsbalkens zu aktualisieren, können Sie die Option --title verwenden, um den Titel des Widgets festzulegen, und die Option --gauge-data, um den aktuellen Wert des Fortschrittsbalkens festzulegen. Um beispielsweise den Fortschrittsbalken so zu aktualisieren, dass er zu 50 % abgeschlossen ist, können Sie den folgenden Befehl verwenden:

dialog --title "Copying file" --gauge-data 50

Dieser Befehl aktualisiert den Titel des Widgets auf Datei kopieren und den Wert des Fortschrittsbalkens auf 50. Der Fortschrittsbalken wird mit den neuen Werten neu gezeichnet, und der Benutzer sieht den aktualisierten Fortschritt der Aufgabe im Terminal.

Um den Befehl dialog in einem Shell-Skript zu verwenden, können Sie mit der Option --and-widget eine Liste von Widget-Befehlen angeben, die nacheinander ausgeführt werden sollen. Auf diese Weise können Sie den Fortschrittsbalken im Skript erstellen und aktualisieren und sicherstellen, dass die Widgets in der richtigen Reihenfolge gezeichnet und aktualisiert werden.

Hier ist ein Beispiel für ein Shell-Skript, das den Befehl dialog verwendet, um einen Fortschrittsbalken zu erstellen und zu aktualisieren:

#!/bin/bash

# Create the progress bar widget
dialog --gauge "Copying file" 10 70 0

Verwenden Sie die ncurses-Bibliothek, um einen Fortschrittsbalken in Bash zu erstellen

Ein weiterer Ansatz, um einem Shell-Skript einen Fortschrittsbalken hinzuzufügen, ist die Verwendung der Bibliothek ncurses, einer Programmierbibliothek zum Erstellen benutzerfreundlicher Oberflächen im Terminal. Die Bibliothek ncurses bietet viele Funktionen und Widgets zum Erstellen interaktiver Menüs, Formulare und anderer grafischer Benutzeroberflächen und kann verwendet werden, um einen benutzerdefinierten Fortschrittsbalken in einem Shell-Skript zu erstellen.

Um die Bibliothek ncurses zu verwenden, um einem Shell-Skript einen Fortschrittsbalken hinzuzufügen, können Sie die Funktion initscr verwenden, um den Bildschirm zu initialisieren, und die Funktion newwin, um ein neues Fenster für den Fortschrittsbalken zu erstellen. Die Funktion newwin nimmt mehrere Argumente entgegen, darunter die Höhe und Breite des Fensters und die anfängliche Position des Fensters auf dem Bildschirm.

Hier ist ein Beispiel, wie Sie mit der Funktion newwin ein Fortschrittsbalkenfenster mit einer Höhe von 10 Zeilen und einer Breite von 70 Zeichen an der Position (5,5) auf dem Bildschirm erstellen:

#!/bin/bash

# Initialize the screen
initscr

# Create the progress bar window
win=`newwin 10 70 5 5`

Dieser Code initialisiert den Bildschirm und erstellt ein neues Fenster für den Fortschrittsbalken. Die Variable win verweist auf das Fenster, das verwendet werden kann, um auf den Fortschrittsbalken im Skript zuzugreifen und ihn zu aktualisieren.

Um den Anfangszustand des Fortschrittsbalkens zu zeichnen, können Sie mit der Funktion box einen Rahmen um das Fenster ziehen und mit der Funktion mvwaddstr den Titel des Fortschrittsbalkens und den Anfangswert von 0% in den Rahmen schreiben.

Hier ist ein Beispiel dafür, wie Sie diese Funktionen verwenden, um den Anfangszustand des Fortschrittsbalkens zu zeichnen:

# Draw the box around the window
box $win 0 0

# Write the title and initial value of the progress bar
mvwaddstr $win 1 1 "Copying file"
mvwaddstr $win 1 30 "0%"

Um den Fortschritt der Aufgabe und den Wert des Fortschrittsbalkens zu aktualisieren, können Sie die Funktion mvwaddstr erneut verwenden, um den neuen Wert des Fortschrittsbalkens in das Feld zu schreiben. Um beispielsweise den Fortschrittsbalken so zu aktualisieren, dass er zu 50 % abgeschlossen ist, können Sie den folgenden Code verwenden:

# Update the value of the progress bar
mvwaddstr $win 1 30 "50%"

Dieser Code überschreibt den vorhandenen Wert des Fortschrittsbalkens mit dem neuen Wert von 50 %. Der Fortschrittsbalken wird mit dem neuen Wert neu gezeichnet, und der Benutzer sieht den aktualisierten Fortschritt der Aufgabe im Terminal.

Olorunfemi Akinlua avatar Olorunfemi Akinlua avatar

Olorunfemi is a lover of technology and computers. In addition, I write technology and coding content for developers and hobbyists. When not working, I learn to design, among other things.

LinkedIn