Je cherche à créer un environnement basé sur un terminal dans lequel adapter mon script Bash . Je veux que ça ressemble à ça:
terminal
text-user-interface
tempforTrouvez-moi dans les bois
la source
la source
dialog
, qui est ce que cela semble utiliser.dialog
afficher le menu (mais accepter l'acceptation) lorsqu'il est lancé via une expression de substitution de commande?whiptail
>dialog
aussitui
pour son mode fenêtre divisée (affichage des registres, source et commandes aveclayout reg
par exemple, ettui reg vec
pour afficher les registres de vecteurs dans la fenêtre reg (de manière non flexible, afin que cette partie ne soit pas vraiment utile: /) . IDK si Redhat a écrit le patch qui a ajouté cette fonctionnalité, ou même quel âge il est.Réponses:
La réponse de l'utilisateur est stockée dans le code de sortie, elle peut donc être imprimée comme d'habitude:
echo $?
(notez que cela0
signifie "oui" et1
est "non" dans le monde du shell).Concernant d’autres questions de la section commentaire:
pour mettre dans la boîte de dialogue le résultat d'une commande, utilisez simplement le mécanisme de substitution de commande
$()
, par exemple:pour donner à l'utilisateur plusieurs choix, vous pouvez utiliser l'
--menu
option au lieu de--yesno
pour stocker la sortie du choix de l'utilisateur dans la variable, il faut utiliser l'
--stdout
option ou modifier le descripteur de sortie via--output-fd
ou manuellement, par exemple:Cette astuce est nécessaire car,
dialog
par défaut, les sorties sur stderr, pas stdout.Et comme toujours,
man dialog
c'est ton ami.la source
?
variable, essayezecho $?
.parted -l
à l'utilisateur via une boîte de dialogue, l'option--menu
est probablement préférable-yesno
. Dans ce cas, vous devrez jouer un peu avec les descripteurs pour stocker le résultat dans la variable, par exemple: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.man dialog
La capture d’écran de la question ressemble à whiptail (programme qui imite les dialogues avec un nombre réduit de fonctions , en utilisant newt plutôt que ncurses ). La manière dont le titre et les boutons sont rendus est intégrée à chaque programme, ce qui leur donne un aspect différent.
Voici un script qui duplique la capture d’écran d’origine, que ce soit pour whiptail ou dialog:
et pour comparaison, capture d'écran avec whiptail:
et avec dialogue:
Outre l'apparence différente du titre et des boutons, la boîte de dialogue utilise des couleurs différentes par défaut (bien que cela soit configurable - voir les captures d'écran ) et utilise moins de lignes à l'écran.
dialog (et whiptail) utilisent des bibliothèques pour gérer l’affichage des lignes, des couleurs, etc. Mais vous pouvez également voir que newt est utilisé dans le programme Red Hat anaconda en tant que bibliothèque partagée appelée à partir de python (avec la même apparence). Dans le même ordre d'idées, le programme de configuration du noyau a commencé comme une copie (tronquée) de la boîte de dialogue, puis a évolué vers des fonctionnalités utilisant une bibliothèque partagée (sans le
lxdialog
programme d' origine ), un peu à la manière dont newt est utilisé depuis python.De bash - vous pouvez utiliser soit dialog ou whiptail pour les fonctionnalités les plus couramment utilisées. Quelqu'un a écrit un wrapper pour que ceux-ci (en Perl) autorisent les scripts à utiliser plus facilement ceux-ci ou quelques autres, mais il vaut mieux utiliser dialog directement puisque le module perl a essentiellement un dénominateur commun.
Les sources de dialogue incluent des exemples de tous les widgets, ainsi que la plupart des options de ligne de commande:
Lectures complémentaires:
la source
Je crois que le paquet que vous recherchez est ncurses .
Wikipedia décrit ncurses comme suit:
Il est largement utilisé, par exemple, dans l'outil de configuration du noyau menuconfig:
Puisque vous utilisez bash, vous pouvez utiliser Bash Simple Curses (comme mentionné par Runium dans le commentaire ci-dessous).
la source
ncurses
est une C-bibliothèque. (Si je comprends bien) OP veut un environnement de script (pour bash).menuconfig
est écrit en C. Au lieu dedialog
, comme indiqué dans une autre réponse, vous pourriez peut-être mentionner Bash Simple Curses qui est écrit en bash (comptertput
).ncurses
c'est la base de ceci, et cela répond à une version plus générale de la question ... comme celle du titre ici :)zenity
.
.
autres interfaces utilisateur graphiques (GUI)
arrête l'exécution ultérieure du script, le casse. la ligne: echo $? , ne se produira jamais
la source