coda di cavallo o dialogo


15

Ho intenzione di creare uno script che utilizzerà l'input dell'utente, quindi ho deciso di usare il whiptail, ma un po 'confondere quello che è portatile e funzionerà in Ubuntu 10.xe versioni successive e CentOs5.x e versioni successive.

Lo so read, ma voglio dialogare come uno strumento, quindi se qualcuno conosce qualche alternativa fammelo sapere.


non era whiptailuna fregatura dialog?
sjas,

Risposte:


12

whiptailè installato di default sulla maggior parte dei sistemi basati su deb, mentre dialognon lo è.

D'altronde, su rpm whiptailè anche l'app di dialogo predefinita.

Immagino sia importante per te.

Quindi whiptailè la scelta giusta dal punto di vista della portabilità.

Si whiptailbasa anche su newt, mentre dialogè basato su ncurses. Dal mio punto di vista, il primo è più bello (:


buono a sapersi informazioni extra :)
Rahul Patil,

2
Lo script potrebbe essere più o meno portatile, ma il programma di dialogo stesso non è meno portatile di whiptail.
Thomas Dickey,

8

Perché non usare entrambi:

(Richiede 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...."    

1
Così complicato. Perché non qualcosa di simile a questo: which whiptail && window=whiptail; which dialog && window=dialog; [ -z window ] && echo "no whiptail or dialog". Quindi l'operazione può fare semplicemente $ $ --title foo --msgbox bar 87 5 `.
James M. Lay

6

(Questa non è necessariamente una risposta, ma ho pubblicato come tale a causa della quantità di codice. Non ho esperienza pratica con whiptail. Lo eliminerò in seguito se un whiptailutente pubblica una soluzione testata su questo.)

Come scrive Bash Shell Scripting / Whiptail :

Dal suo README: whiptail è progettato per essere compatibile drop-in con dialog (1), ma ha meno funzioni: alcune finestre di dialogo non sono implementate, come tailbox, timebox, calendarbox, ecc.

Ciò significa che non devi necessariamente decidere l'uno o l'altro. Basta rilevare quale è disponibile, quindi lasciare che lo script lo usi:

# 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

(Sì, il rilevamento di cui sopra fallirà sugli strumenti installati all'interno delle directory con nome contenente caratteri di nuova riga. L'ho semplicemente tenuto semplice.)


5

Secondo la sezione COMPATIBILITÀ della pagina di dialogo della finestra di dialogo (1) :

Poi c'è la frusta . Per scopi pratici, è gestito da Debian (i suoi sviluppatori a monte svolgono pochissimo lavoro). La sua documentazione (README.whiptail) rivendica

whiptail (1) è un sostituto leggero per dialog (1), per fornire finestre di dialogo per gli script di shell. È costruito sulla libreria newt windowing piuttosto che sulla libreria ncurses, permettendo di essere più piccolo in ambienti embedded come installer, dischi di ripristino, ecc.

whiptail è progettato per essere compatibile drop-in con la finestra di dialogo, ma ha meno funzioni: alcune finestre di dialogo non sono implementate, come casella di coda, casella del tempo, casella del calendario, ecc.

Confrontando le dimensioni reali (prove Debian, 2007/1/10): Il totale dei formati per whiptail , il tritone, popt e biblioteche gergo è 757 KB. Il numero comparabile per la finestra di dialogo (contando ncurses) è 520 KB. Ignora il primo paragrafo.

Il secondo paragrafo è fuorviante, poiché anche * whiptail ** non funziona per le opzioni comuni di dialogo , come la casella degli indicatori. il whiptail è meno compatibile con il dialogo rispetto al programma originale di dialogo 0.4 della metà degli anni '90.

whiptail 's pagina di manuale prende in prestito le caratteristiche di dialogo , ad esempio, ma cita stranamente solo dialogo versioni fino a 0,4 (1994) come fonte. Cioè, la sua manpage si riferisce a funzionalità che sono state prese in prestito da versioni più recenti della finestra di dialogo , ad es.

  • --gauge (da 0,5)

  • --passwordbox (dalle modifiche di Debian nel 1999),

  • --default-item (dalla finestra di dialogo 2000/02/22),

  • --output-fd (dalla finestra di dialogo 2002/08/14).

Un po 'scherzosamente, si può notare che il popt funzione (non documentato nella sua pagina di manuale) di utilizzare un "-" come una fuga è stata documentata in dialogo 's pagina man circa un anno prima di essere menzionato in whiptail ' s pagina di manuale. whiptail 's pagina man attributi in modo non corretto che a getopt (ed è comunque imprecisa).

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.