whiptail ou dialogue

15

Je vais créer un script qui utilisera l'entrée utilisateur, j'ai donc décidé d'utiliser whiptail, mais un peu confondre celui qui est portable et fonctionnera dans ubuntu 10.x et supérieur et CentOs5.x et supérieur.

Je sais read, mais je veux un outil de dialogue, donc si quelqu'un connaît une alternative, faites le moi savoir.

Rahul Patil
la source
n'était pas whiptailune arnaque dialog?
sjas

Réponses:

12

whiptailest installé par défaut sur la plupart des systèmes basés sur deb, alors qu'il dialogne l'est pas.

Afair, sur rpm whiptailest également une application de dialogue par défaut.

Je suppose que ça compte pour toi.

Il en whiptailva de même du bon choix du point de portabilité.

Est également whiptailbasé sur newt, tandis que dialogest basé sur ncurses. De mon point de vue, le premier est plus beau (:

se ruer
la source
bon à savoir info supplémentaire :)
Rahul Patil
2
Le script peut être plus ou moins portable, mais le programme de dialogue lui-même n'est pas moins portable que whiptail.
Thomas Dickey
8

Pourquoi ne pas utiliser les deux:

(Nécessite bash 4)

#!/usr/bin/env bash
t(){ type "$1"&>/dev/null;}
function Menu.Show {
   local DIA DIA_ESC; while :; do
      t whiptail && DIA=whiptail && break
      t dialog && DIA=dialog && DIA_ESC=-- && break
      exec date +s"No dialog program found"
   done; declare -A o="$1"; shift
   $DIA --backtitle "${o[backtitle]}" --title "${o[title]}" \
      --menu "${o[question]}" 0 0 0 $DIA_ESC "$@"; }



Menu.Show '([backtitle]="Backtitle"
            [title]="Title"
            [question]="Please choose:")'          \
                                                   \
            "Option A"  "Stuff...."                \
            "Option B"  "Stuff...."                \
            "Option C"  "Stuff...."    
Orwellophile
la source
1
Si compliqué. Pourquoi ne pas quelque chose comme ceci: which whiptail && window=whiptail; which dialog && window=dialog; [ -z window ] && echo "no whiptail or dialog". Ensuite, l'op peut simplement faire `$ window --title foo --msgbox bar 87 5`.
James M. Lay
6

(Ce n'est pas nécessairement une réponse, mais j'ai posté en tant que telle en raison de la quantité de code. Je n'ai aucune expérience pratique whiptail. Supprimera cela plus tard si un whiptailutilisateur publie une solution testée à ce sujet.)

Comme l' écrit Bash Shell Scripting / Whiptail :

À partir de son fichier README: whiptail est conçu pour être compatible avec drop-in avec dialog (1), mais a moins de fonctionnalités: certaines boîtes de dialogue ne sont pas implémentées, telles que tailbox, timebox, calendarbox, etc.

Cela signifie que vous n'avez pas nécessairement à choisir l'un ou l'autre. Détectez simplement lequel est disponible puis laissez le script l'utiliser:

# check whether whiptail or dialog is installed
# (choosing the first command found)
read dialog <<< "$(which whiptail dialog 2> /dev/null)"

# exit if none found
[[ "$dialog" ]] || {
  echo 'neither whiptail nor dialog found' >&2
  exit 1
}

# just use whichever was found
"$dialog" --msgbox "Message displayed with $dialog" 0 0

(Oui, la détection ci-dessus échouera sur les outils installés dans des répertoires dont le nom contient des caractères de nouvelle ligne. Je suis resté simple.)

homme au travail
la source
5

Selon la section COMPATIBILITÉ de la page de manuel de la boîte de dialogue (1) :

Ensuite, il y a un whiptail . À des fins pratiques, il est maintenu par Debian (très peu de travail est fait par ses développeurs en amont). Sa documentation (README.whiptail) revendique

whiptail (1) est un remplacement léger de dialog (1), pour fournir des boîtes de dialogue pour les scripts shell. Il est construit sur la bibliothèque de fenêtrage newt plutôt que sur la bibliothèque ncurses, ce qui lui permet d'être plus petit dans les environnements embarqués tels que les installateurs, les disques de secours, etc.

whiptail est conçu pour être compatible avec les dialogues, mais a moins de fonctionnalités: certaines boîtes de dialogue ne sont pas implémentées, telles que la boîte à queue, la boîte de temps, la boîte de calendrier, etc.

Comparaison des tailles réelles (tests Debian, 2007/1/10): Le total des tailles pour les bibliothèques whiptail , newt, popt et slang est de 757 Ko. Le nombre comparable de dialogues (en comptant les ncurses) est de 520 Ko. Ignorez le premier paragraphe.

Le deuxième paragraphe est trompeur, car * whiptail ** ne fonctionne pas non plus pour les options courantes de dialogue , telles que la boîte de jauge. whiptail est moins compatible avec dialog que le programme original de dialogue 0.4 du milieu des années 90.

La page de manuel de whiptail emprunte des fonctionnalités de dialogue , par exemple, mais cite étrangement uniquement les versions de dialogue jusqu'à 0.4 (1994) comme source. Autrement dit, sa page de manuel fait référence à des fonctionnalités qui ont été empruntées à des versions plus récentes de dialogue , par exemple,

  • - calibre (à partir de 0,5)

  • --passwordbox (à partir des changements de Debian en 1999),

  • --default-item (de la boîte de dialogue 2000/02/22),

  • --output-fd (à partir de la boîte de dialogue 2002/08/14).

Avec un peu d'humour, on peut noter que la fonction popt (non documentée dans sa page de manuel) d'utiliser un "-" comme fuite a été documentée dans la page de manuel de dialog environ un an avant d'être mentionnée dans la page de manuel de whiptail . whiptail « s manpage attribue à tort que la getopt (et est inexact de toute façon).

Buo-Ren Lin
la source