bash 实用程序“对话框”留下一个凌乱的屏幕

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

我知道它的晚,但也许你想切换到备用屏幕(比如nanovim和其他人),所以你可以给一个尝试的--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 1.2、bash 4.3 和几个终端模拟器很有用。谢谢。 (2认同)

mur*_*uru 3

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 开始)。