Ich möchte eine Terminal-basierte Umgebung erstellen, in die ich mein Bash- Skript anpassen kann . Ich möchte, dass es so aussieht:
terminal
text-user-interface
tempforFinde mich im Wald
quelle
quelle
dialog
, was dies zu verwenden scheint.dialog
das Menü nicht angezeigt (akzeptiert aber), wenn es über einen Befehlsersetzungsausdruck gestartet wird?whiptail
>dialog
auchtui
für den geteilten Fenstermodus verwendet (layout reg
z. B.tui reg vec
zum Anzeigen von Registern, Quellen und Befehlen sowie zum Anzeigen von Vektorregistern im Reg-Fenster (auf nicht flexible Weise, sodass dieser Teil nicht wirklich nützlich ist: /). IDK, ob Redhat den Patch geschrieben hat, der diese Funktion hinzugefügt hat, oder wie alt sie istAntworten:
Die Benutzerantwort wird im Exit-Code gespeichert und kann wie gewohnt gedruckt werden:
echo $?
(Beachten Sie, dass0
dies1
in der Shell-Welt "Ja" und "Nein" bedeutet.)Zu weiteren Fragen aus dem Kommentarbereich:
Um die Ausgabe eines Befehls in das Dialogfeld einzufügen, verwenden Sie einfach den Befehlssubstitutionsmechanismus
$()
, z.Um dem Benutzer mehrere Auswahlmöglichkeiten zu geben, können Sie die
--menu
Option anstelle von verwenden--yesno
Um die Ausgabe der Benutzerauswahl in einer Variablen zu speichern, muss die
--stdout
Option verwendet oder der Ausgabedeskriptor entweder über--output-fd
oder manuell geändert werden, z. B .:Dieser Trick wird benötigt, da
dialog
standardmäßig stderr und nicht stdout ausgegeben wird.Und wie immer
man dialog
ist dein Freund.quelle
?
Variablen gespeichert . Versuchen Sie esecho $?
.parted -l
dem Benutzer die Ausgabe des Befehls über ein Dialogfeld anzeigen möchten,--menu
ist die Option wahrscheinlich die bessere Wahl als-yesno
. In einem solchen Fall müssten Sie ein bisschen mit Deskriptoren spielen, um die Ausgabe in der Variablen zu speichern, zum Beispiel:output=$(dialog --backtitle "Package configuration" --title "Configuration sun-java-jre" --menu "$(parted -l)" 15 40 4 1 "sda1" 2 "sda2" 3 "sda3" 3>&1 1>&2 2>&3 3>&-); echo $output
--stdout
Option verwenden.man dialog
Der Screenshot in der Frage sieht aus wie whiptail (funktionsreduzierten Programm Imitieren Dialog , mit Molche statt ncurses ). Die Art und Weise, wie Titel und Schaltflächen gerendert werden, ist in jedes Programm integriert, sodass sie unterschiedlich aussehen.
Hier ist ein Skript, das den Original-Screenshot für Whiptail oder Dialog dupliziert:
und zum Vergleich Screenshot mit Whiptail:
und mit dialog:
Neben dem unterschiedlichen Erscheinungsbild von Titel und Schaltflächen werden im Dialogfeld standardmäßig andere Farben verwendet (obwohl dies konfigurierbar ist - siehe Screenshots ) und weniger Zeilen auf dem Bildschirm.
dialog (und whiptail) verwenden Bibliotheken, um die Anzeige von Linien, Farben usw. zu verwalten. Sie können jedoch auch Newt in Red Hat Anaconda als gemeinsam genutzte Bibliothek sehen, die von Python aufgerufen wird (mit demselben Erscheinungsbild). Entsprechend startete das Kernel-Konfigurationsprogramm als (gekürzte) Kopie des Dialogs und entwickelte sich dann mithilfe einer gemeinsam genutzten Bibliothek (ohne das ursprüngliche
lxdialog
Programm) zu Features, ähnlich wie Newt in Python verwendet wird.Von Bash - Sie können entweder Dialog oder Whiptail für die am häufigsten verwendeten Funktionen verwenden. Jemand hat einen Wrapper für diese (in Perl) geschrieben , damit Skripte diese oder einige andere Skripte einfacher verwenden können. Sie sollten jedoch den Dialog direkt verwenden, da das Perl-Modul im Wesentlichen ein gemeinsamer Nenner ist.
Die Dialogquellen enthalten Beispiele für alle Widgets sowie die meisten Befehlszeilenoptionen:
Weitere Lektüre:
quelle
Ich glaube, das Paket, das Sie suchen, ist ncurses .
Wikipedia beschreibt ncurses wie folgt:
Es wird beispielsweise häufig im Kernel-Konfigurationstool menuconfig verwendet:
Da Sie bash verwenden, können Sie Bash Simple Curses verwenden (wie von Runium im Kommentar unten erwähnt).
quelle
ncurses
ist eine C-Bibliothek. (Wenn ich es richtig verstehe) OP möchte eine Scripting- Umgebung (für Bash).menuconfig
wird in C geschrieben. Als Alternative zudialog
, wie in der anderen Antwort, könnten Sie vielleicht Bash Simple Curses erwähnen, das in bash (unter Berufung auftput
) geschrieben ist.ncurses
die Grundlage ist und eine allgemeinere Version der Frage beantwortet ... wie die im Titel hier :)Lebensfreude
.
.
andere grafische Benutzeroberflächen (GUI)
stoppt die weitere Ausführung des Skripts, bricht es jedoch ab. die Zeile: echo $? , Wird nie passieren
quelle