whiptail ou diálogo

12

Eu estou indo para criar script que irá usar a entrada do usuário, então eu decidi usar o whiptail, mas pouco confundo que é portátil e funcionará no Ubuntu 10.x ou superior e no CentOs5.x ou superior.

Eu conheço read , mas quero dialogar como ferramenta, então, se alguém souber alguma alternativa, é só me avisar.

    
por Rahul Patil 13.02.2013 / 10:25

4 respostas

12

whiptail é instalado por padrão na maioria dos sistemas baseados em deb, enquanto dialog não é.

Afair, em whiptail baseado em rpm, também é um aplicativo de diálogo padrão.

Acho que é importante para você.

Portanto, whiptail é a escolha certa do ponto de portabilidade.

Também whiptail é baseado em newt , enquanto dialog é baseado em ncurses . Do meu ponto de vista, o primeiro é mais bonito (:

    
por 13.02.2013 / 11:08
8

Por que não usar os dois:

(requer 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...."    
    
por 26.05.2013 / 10:26
6

(Isso não é necessariamente uma resposta, mas eu postei como tal devido à quantidade de código. Não tenho experiência prática com whiptail . Excluirá isso mais tarde se um usuário whiptail postar uma solução testada sobre isso. )

Como Bash Shell Scripting / Whiptail escreve:

From its README: whiptail is designed to be drop-in compatible with dialog(1), but has less features: some dialog boxes are not implemented, such as tailbox, timebox, calendarbox, etc.

Isso significa que você não precisa necessariamente decidir por um ou outro. Basta detectar qual deles está disponível e deixar o script usá-lo:

# 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

(Sim, a detecção acima falhará em ferramentas instaladas dentro de diretórios com nome contendo caracteres de nova linha. Simplesmente continuei simples.)

    
por 13.02.2013 / 11:58
1

De acordo com a seção COMPATIBILIDADE da página de manual do diálogo (1) :

Then there is whiptail. For practical purposes, it is maintained by Debian (very little work is done by its upstream developers). Its documentation (README.whiptail) claims

whiptail(1) is a lightweight replacement for dialog(1), to provide dialog boxes for shell scripts. It is built on the newt windowing library rather than the ncurses library, allowing it to be smaller in embedded environments such as installers, rescue disks, etc.

whiptail is designed to be drop-in compatible with dialog, but has less features: some dialog boxes are not implemented, such as tailbox, timebox, calendarbox, etc.

     

Comparando tamanhos reais (teste Debian, 2007/1/10): O total de tamanhos para whiptail , as bibliotecas newt, popt e slang são 757 KB. O número comparável para o diálogo (contagem de ncurses) é de 520 KB. Desconsidere o primeiro parágrafo.

     

O segundo parágrafo é enganoso, já que o * whiptail ** também não funciona para opções comuns do diálogo , como a caixa do medidor. O whiptail é menos compatível com o diálogo do que o programa 0.4 original da mid-1990s.

     A página de manual do

whiptail empresta recursos do diálogo , por exemplo, mas estranhamente cita apenas as versões do diálogo até 0,4 (1994) como fonte . Ou seja, sua página de manual refere-se a recursos que foram emprestados de versões mais recentes do diálogo , por exemplo,

     
  • - medidor (de 0,5)

  •   
  • - passwordbox (do Debian muda em 1999),

  •   
  • - default-item (do diálogo 2000/02/22),

  •   
  • - saída-fd (do diálogo 2002/08/14).

  •   

Um pouco engraçado, pode-se notar que o recurso popt (não documentado em sua manpage) de usar um "-" como um escape foi documentado na manpage do diálogo cerca de um ano antes de ser mencionado na manpage do whiptail . A página de manual do whiptail incorretamente atribui isso a getopt (e é impreciso de qualquer maneira).

    
por 10.12.2018 / 17:30