Утилита bash 'диалог' оставляет грязный экран

Когда я запускаю этот сценарий, он отображает параметры в стиле меню на моем терминале, а затем запускает соответствующую команду в сценарии.

Script Screen

#!/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

Но когда он выходит, экран портится.

Есть ли способ «сохранить» состояние экрана до того, как я запустил его и восстановить его?

Есть ли лучшая сценарийная программа «Windows», которая работает на текстовом экране?

Messed up Screen

5
задан 13 August 2014 в 15:30

3 ответа

dialog упоминания страницы справочника whiptail (довольно удерживающим от использования способом). Это не имеет --ascii-lines опция, но это не портит экран также:

terminal screenshot with aftermaths of dialog and whiptail

сценарий:

#!/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

дисплей от whiptail: screenshot of whiptail in action

Среди прочего, whiptail основан newt вместо ncurses. Это - также зависимость ubuntu-minimal, таким образом, это должно быть установлено во всех системах Ubuntu по умолчанию (по крайней мере, с 14,04).

0
ответ дан 13 August 2014 в 15:30

Просто добавьте clear после 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
...
0
ответ дан 13 August 2014 в 15:30
  • 1
    Вы делали свой исполняемый файл сценария? Т.е. chmod +x <filename>? – s3lph 15 January 2017 в 23:37

Я знаю, что поздно, но возможно Вы хотите переключиться на альтернативный экран (как nano, vim, и другие делают), таким образом, Вы могли дать попытку --keep-tite выбор.

От диалог страница человека:

- держат-tite : Обычно диалог проверяет, чтобы видеть, бежит ли он в xterm и в этом случае пытается подавить последовательности инициализации, которые заставили бы его переключиться на альтернативный экран. Переключение между нормальными и альтернативными экранами визуально недовольно в сценарии, который несколько раз управляет диалогом. Используйте этот выбор позволить диалогу использовать те последовательности инициализации.

Вот пример:

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

После того, как пользователь совершает нападки хорошо, продукция, напечатанная, прежде чем призыв dialog ... будет восстановлен.

7
ответ дан 13 August 2014 в 15:30
  • 1
    У меня есть та строка в сценарии, и Thunar открывают файл в текстовом редакторе. – jcubic 15 January 2017 в 09:23

Другие вопросы по тегам:

Похожие вопросы: