chicote ou diálogo

15

Vou criar um script que usará a entrada do usuário, por isso decidi usar o whiptail, mas confundir um pouco o que é portátil e funcionará no ubuntu 10.xe superior e no CentOs5.x e superior.

Eu sei read, mas quero um diálogo como ferramenta, por isso, se alguém souber alguma alternativa, deixe-me saber.

Rahul Patil
fonte
não foi whiptailum roubo dialog?
sjas 8/09/19

Respostas:

12

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

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

Eu acho que isso importa para você.

Assim 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 (:

pressa
fonte
bom saber informações adicionais :)
Rahul Patil
2
O script pode ser mais ou menos portátil, mas o próprio programa de diálogo não é menos portátil que o chicote.
21815 Thomas
8

Por que não usar os dois:

(Requer festança 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
fonte
1
Tão complicado. Por que não algo como isto: which whiptail && window=whiptail; which dialog && window=dialog; [ -z window ] && echo "no whiptail or dialog". Então o op pode simplesmente fazer `$ window --title foo --msgbox bar 87 5`.
James M. Lay
6

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

Como o Bash Shell Scripting / Whiptail escreve:

A partir do README: whiptail foi projetado para ser compatível com o diálogo (1), mas possui menos recursos: algumas caixas de diálogo não são implementadas, como tailbox, timebox, calendarbox, etc.

Isso significa que você não precisa necessariamente decidir por um ou outro. Apenas detecte qual deles está disponível e deixe 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á nas ferramentas instaladas dentro dos diretórios com nome contendo caracteres de nova linha. Eu apenas mantive isso simples.)

homem a trabalhar
fonte
5

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

Depois, há o chicote . Para propósitos práticos, ele é mantido pelo Debian (muito pouco trabalho é feito por seus desenvolvedores upstream). Sua documentação (README.whiptail) afirma

O whiptail (1) é um substituto leve para o diálogo (1), para fornecer caixas de diálogo para scripts de shell. Ele é construído na biblioteca newt windowing, e não na biblioteca ncurses, permitindo que seja menor em ambientes incorporados, como instaladores, discos de recuperação etc.

O whiptail foi desenvolvido para ser compatível com o diálogo, mas possui menos recursos: algumas caixas de diálogo não são implementadas, como caixa de saída, caixa de tempo, caixa de calendário, etc.

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

O segundo parágrafo é enganoso, pois * whiptail ** também não funciona para opções comuns de diálogo , como a caixa de medição. O whiptail é menos compatível com o diálogo do que o programa original do diálogo 0.4, de meados dos anos 90.

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

  • --gauge (de 0,5)

  • --passwordbox (das mudanças do Debian em 1999),

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

  • --output-fd (da caixa de diálogo 2002/08/14).

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

Buo-Ren Lin
fonte