Mee*_*org 6 bash scripts dialog
当我运行此脚本时,它会在我的终端上以菜单样式显示选项,然后在脚本中运行相关命令。

#!/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
Run Code Online (Sandbox Code Playgroud)
但是当它退出时,屏幕就乱了。
在我运行它并恢复它之前,有没有办法“保存”屏幕状态?
是否有更好的“Windows”脚本程序可以在文本屏幕中运行?

小智 10
我知道它的晚,但也许你想切换到备用屏幕(比如nano,vim和其他人),所以你可以给一个尝试的--keep-tite选项。
从对话框的手册页:
--keep-tite:通常对话框会检查它是否在 xterm 中运行,在这种情况下,尝试取消初始化字符串,使其切换到备用屏幕。在多次运行对话框的脚本中,在正常屏幕和备用屏幕之间切换在视觉上会分散注意力。使用此选项允许对话框使用这些初始化字符串。
下面是一个例子:
echo "Write something before invoking dialog."
dialog --keep-tite --msgbox "Hello world!" 0 0
Run Code Online (Sandbox Code Playgroud)
用户点击OK后,dialog ...恢复调用前打印的输出。
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
Run Code Online (Sandbox Code Playgroud)
显示来自whiptail:

除此之外,whiptail是基于newt而不是ncurses。它也是 的依赖项ubuntu-minimal,因此默认情况下它应该安装在所有 Ubuntu 系统上(至少从 14.04 开始)。