bash utilitário 'diálogo' deixa uma tela bagunçada

3

Quando executo este script, ele exibe opções em um estilo de menu no meu terminal e, em seguida, executa o comando relavent no script.

#!/bin/sh
TEMP=/tmp/answer$$
dialog --ascii-lines --title "Administrative tasks"  --menu  "Tasks :" 20 0 0 1 "Display firewall settings" 2 "Restore firewall settings" 3 "Flush Firewall settings" 2>$TEMP
choice='cat $TEMP'
case $choice in
        1)      iptables -L
                ;;
        2)      iptables-restore </etc/iptables.firewall.rules
                iptables -L
                ;;
        3)      iptables --flush
                iptables -L
                ;;
esac
echo Selected $choice

Mas quando sai, a tela está desarrumada.

Existe uma maneira de "salvar" o estado da tela antes de executá-lo e restaurá-lo?

Existe um programa de script "Windows" melhor que é executado em uma tela de texto?

    
por Meer Borg 13.08.2014 / 13:30

3 respostas

2

A dialog manpage menciona whiptail (de uma forma bastante depreciativa). Ele não tem a opção --ascii-lines , mas também não atrapalha a tela:

O script:

#!/bin/sh
TEMP=/tmp/answer$$
whiptail --title "Administrative tasks"  --menu  "Tasks :" 20 0 0 1 "Display firewall settings" 2 "Restore firewall settings" 3 "Flush Firewall settings" 2>$TEMP
choice='cat $TEMP'
case $choice in
        1)      echo 1 #iptables -L
                ;;
        2)      echo 2 #iptables-restore </etc/iptables.firewall.rules
                #iptables -L
                ;;
        3)      echo 3 #iptables --flush
                #iptables -L
                ;;
esac
echo Selected $choice

A exibição de whiptail :

Entre outras coisas, whiptail é baseado em newt em vez de ncurses . É também uma dependência de ubuntu-minimal , por isso deve ser instalado em todos os sistemas Ubuntu por padrão (pelo menos, a partir de 14.04).

    
por muru 24.08.2014 / 01:49
3

Eu sei que é tarde, mas talvez você queira mudar para a tela alternativa (como nano , vim e outros), então você pode tentar o --keep-tite opção.

Na página de manual do diálogo :

  

- keep-tite : Normalmente, o diálogo verifica se está sendo executado em um xterm e, nesse caso, tenta suprimir as sequências de inicialização que o fazem alternar para a tela alternativa. Alternar entre as telas normal e alternativa distrai visualmente em um script que executa a caixa de diálogo várias vezes. Use essa opção para permitir que o diálogo use essas cadeias de inicialização.

Veja um exemplo:

echo "Write something before invoking dialog."
dialog --keep-tite --msgbox "Hello world!" 0 0

Após o usuário clicar em OK, a saída impressa antes de invocar dialog ... é restaurada.

    
por cav94mat 11.10.2015 / 16:53
1

Basta adicionar clear após a linha dialog :

...
dialog --ascii-lines --title "Administrative tasks"  --menu  "Tasks :" 20 0 0 1 "Display firewall settings" 2 "Restore firewall settings" 3 "Flush Firewall settings" 2>$TEMP
clear #clears the terminal screen
choice='cat $TEMP'
case $choice in
...
    
por chaos 13.08.2014 / 13:38