Wie erstelle ich ein Menü in einem Shell-Skript, das 3 Optionen anzeigt, bei denen ein Benutzer die Pfeiltasten verwendet, um den Markierungscursor zu bewegen, und die Eingabetaste drückt, um eine auszuwählen?
shell
shell-script
menu
Mrplow911
quelle
quelle
tput
, aber ich denke, das erstere ist nicht möglich), aber Sie können einfache Menüs in Bash erstellen mitselect
: tldp.org/LDP/Bash-Beginners-Guide/html/sect_09_06.htmldialog
Paket, das grundlegende Faux-GUI-Terminalschnittstellen in Skripten erstellt.Antworten:
Dialog ist ein großartiges Werkzeug für das, was Sie erreichen möchten. Hier ist das Beispiel eines einfachen 3-Auswahl-Menüs:
Die Syntax lautet wie folgt:
Die Auswahl wird an gesendet
stderr
. Hier ist ein Beispielskript mit 3 Farben.Unter Debian können Sie
dialog
über das gleichnamige Paket installieren .quelle
Hier ist eine reine
bash
Skriptlösung in Form derselect_option
Funktion, die sich ausschließlich auf ANSI-Escape-Sequenzen und die integrierte Funktion stütztread
.Funktioniert unter Bash 4.2.45 unter OSX. Die flippige Teile , die nicht ebenso gut von allen in allen Umgebungen funktionieren könnte ich weiß , sind die
get_cursor_row()
,key_input()
(erkennen Tasten auf / ab) und diecursor_to()
Funktionen.Hier ist ein Anwendungsbeispiel:
Die Ausgabe sieht wie folgt aus, wobei die aktuell ausgewählte Option durch inverse Ansi-Färbung hervorgehoben wird (hier im Markdown schwer zu vermitteln). Dies kann bei Bedarf in der
print_selected()
Funktion angepasst werden.Update: Hier ist eine kleine Erweiterung,
select_opt
die die obigeselect_option
Funktion umschließt, um die Verwendung in einercase
Anweisung zu vereinfachen :Anwendungsbeispiel mit 3 Literaloptionen:
Sie können auch mischen, wenn einige Einträge bekannt sind (in diesem Fall Ja und Nein), und den Exit-Code
$?
für den Platzhalter verwenden:quelle