Когда я запускаю этот сценарий, он отображает параметры в стиле меню на моем терминале, а затем запускает соответствующую команду в сценарии.
#!/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», которая работает на текстовом экране?
dialog
упоминания страницы справочника whiptail
(довольно удерживающим от использования способом). Это не имеет --ascii-lines
опция, но это не портит экран также:
сценарий:
#!/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
:
Среди прочего, whiptail
основан newt
вместо ncurses
. Это - также зависимость ubuntu-minimal
, таким образом, это должно быть установлено во всех системах Ubuntu по умолчанию (по крайней мере, с 14,04).
Просто добавьте 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
...
Я знаю, что поздно, но возможно Вы хотите переключиться на альтернативный экран (как nano
, vim
, и другие делают), таким образом, Вы могли дать попытку --keep-tite
выбор.
От диалог страница человека:
- держат-tite : Обычно диалог проверяет, чтобы видеть, бежит ли он в xterm и в этом случае пытается подавить последовательности инициализации, которые заставили бы его переключиться на альтернативный экран. Переключение между нормальными и альтернативными экранами визуально недовольно в сценарии, который несколько раз управляет диалогом. Используйте этот выбор позволить диалогу использовать те последовательности инициализации.
Вот пример:
echo "Write something before invoking dialog."
dialog --keep-tite --msgbox "Hello world!" 0 0
После того, как пользователь совершает нападки хорошо, продукция, напечатанная, прежде чем призыв dialog ...
будет восстановлен.