Erstellen Sie einen Fortschrittsbalken in Bash
-
Verwenden Sie den Befehl
pv
, um einen Fortschrittsbalken in Bash zu erstellen -
Verwenden Sie den Befehl
dialog
, um einen Fortschrittsbalken in Bash zu erstellen -
Verwenden Sie die
ncurses
-Bibliothek, um einen Fortschrittsbalken in Bash zu erstellen
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 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