当我运行此脚本时,它会在我的终端上以菜单样式显示选项,然后在脚本中运行相关命令。
#!/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”脚本程序?
答案1
我知道已经很晚了,但也许你想换到备用屏幕(例如nano
,,vim
以及其他人也这样做),所以您可以尝试该--keep-tite
选项。
来自对话的手册页:
--keep-tite:通常 dialog 会检查它是否在 xterm 中运行,如果是,则会尝试隐藏使其切换到备用屏幕的初始化字符串。在多次运行 dialog 的脚本中,在正常屏幕和备用屏幕之间切换会造成视觉干扰。使用此选项可允许 dialog 使用这些初始化字符串。
以下是一个例子:
echo "Write something before invoking dialog."
dialog --keep-tite --msgbox "Hello world!" 0 0
用户点击“确定”后,dialog ...
将恢复调用之前打印的输出。
答案2
这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 开始)。
答案3
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
...
答案4
使用 screen 命令可以实现这一点。
使用下面的屏幕运行它,
screen bash yourcommand.sh
这将显示对话框屏幕然后收集选择。此外,这将在退出时恢复现有屏幕。