cola de látigo o diálogo

15

Voy a crear un script que usará la entrada del usuario, así que decidí usar whiptail, pero confundo un poco cuál es portátil y funcionará en ubuntu 10.xy superior y CentOs5.xy superior.

Lo sé read, pero quiero un diálogo como herramienta, así que si alguien conoce alguna alternativa, házmelo saber.

Rahul Patil
fuente
¿No fue whiptailuna estafa dialog?
sjas

Respuestas:

12

whiptailse instala de manera predeterminada en la mayoría de los sistemas basados ​​en deb, mientras dialogque no.

Afair, en rpm whiptailtambién es la aplicación de diálogo predeterminada.

Supongo que es importante para ti.

Entonces, whiptailes la elección correcta desde el punto de portabilidad.

También whiptailse basa en newt, mientras que dialogse basa en ncurses. Desde mi punto de vista, el primero es más hermoso (:

prisa
fuente
bueno saber información adicional :)
Rahul Patil
2
El script puede ser más o menos portátil, pero el programa de diálogo en sí no es menos portátil que Whiptail.
Thomas Dickey
8

¿Por qué no usar ambos?

(Requiere 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
fuente
1
Tan complicado. ¿Por qué no algo como esto which whiptail && window=whiptail; which dialog && window=dialog; [ -z window ] && echo "no whiptail or dialog"? Entonces la operación puede hacer `$ window --title foo --msgbox bar 87 5`.
James M. Lay
6

(Esto no es necesariamente una respuesta, pero publiqué como tal debido a la cantidad de código. No tengo experiencia práctica whiptail. Eliminaré esto más adelante si un whiptailusuario publica una solución probada al respecto).

Como Bash Shell Scripting / Whiptail escribe:

Desde su README: whiptail está diseñado para ser compatible con el cuadro de diálogo (1), pero tiene menos características: algunos cuadros de diálogo no están implementados, como tailbox, timebox, calendarbox, etc.

Eso significa que no necesariamente tiene que decidir por uno u otro. Simplemente detecte cuál está disponible y luego deje que el script lo use:

# 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í, la detección anterior fallará en las herramientas instaladas dentro de directorios con nombre que contenga caracteres de nueva línea. Simplemente lo mantuve simple).

hombre trabajando
fuente
5

De acuerdo con la sección COMPATIBILIDAD de la página del manual de diálogo (1) :

Luego está la cola de látigo . Para fines prácticos, es mantenido por Debian (sus desarrolladores principales realizan muy poco trabajo). Su documentación (README.whiptail) reclama

whiptail (1) es un reemplazo ligero para el diálogo (1), para proporcionar cuadros de diálogo para los scripts de shell. Está construido en la biblioteca de ventanas newt en lugar de la biblioteca ncurses, lo que le permite ser más pequeño en entornos integrados como instaladores, discos de rescate, etc.

Whiptail está diseñado para ser compatible con el diálogo, pero tiene menos características: algunos cuadros de diálogo no están implementados, como tailbox, timebox, calendarbox, etc.

La comparación de tamaños reales (Debian Testing, 01/10/2007): El total de tamaños de cola de látigo , el tritón, popt y bibliotecas argot es 757 KB. El número comparable para el diálogo (contando ncurses) es 520 KB. Haga caso omiso del primer párrafo.

El segundo párrafo es engañoso, ya que * whiptail ** tampoco funciona para las opciones comunes de diálogo , como el cuadro de indicadores. Whiptail es menos compatible con el diálogo que el programa original 0.4 de diálogo de mediados de los 90.

La página de manual de whiptail toma prestadas características del diálogo , por ejemplo, pero extrañamente cita solo las versiones de diálogo hasta 0.4 (1994) como fuente. Es decir, su página de manual se refiere a características que se tomaron prestadas de versiones más recientes del diálogo , por ejemplo,

  • - calibre (de 0.5)

  • --passwordbox (de Debian cambia en 1999),

  • - elemento predeterminado (del cuadro de diálogo 2000/02/22),

  • --output-fd (del diálogo 14/08/2002).

De manera algo humorística, uno puede notar que la característica popt (no documentada en su página de manual) de usar un "-" como escape se documentó en la página de manual del diálogo aproximadamente un año antes de que se mencionara en la página de manual de Whiptail. la página de manual de whiptail atribuye incorrectamente eso a getopt (y de todos modos es inexacto).

Buo-Ren Lin
fuente