循环内运行对话框

时间:2019-11-17 21:32:45

标签: linux bash shell loops dialog

我有一个简单的shell脚本,并且在其中使用Linux程序 Dialog 为基本的开关盒结构制作动态图形菜单。我使用以下参数启动程序:

CHOICE=$(dialog --clear \
         --backtitle "$BACKTITLE" \
         --title "$TITLE" \
         --menu "$MENU" \
         $HEIGHT $WIDTH $CHOICE_HEIGHT \
         "${OPTIONS[@]}" \
         2>&1 >/dev/tty)

一旦选择了开关结构的任何选项,对话框将退出。我想在循环中运行它,使其仅在按下 cancel 按钮时退出。如果将整个脚本放在一个while true循环中,则一旦选择 Cancel ,它就不会退出。

如何通过选择取消退出一个可以退出的循环?进行此操作最有意义的方法是什么? 取消是否会返回一些可用作循环参数的值,以便可以将其破坏?

1 个答案:

答案 0 :(得分:0)

来自man dialog

  

如果按下“取消”按钮(或ESC),则不会写入任何文本;对话框立即退出

是的,您可以根据情况进行循环,然后测试是否为空。

一个例子

CHOICE="foobar" ; 
while [ -n  "$CHOICE"  ] ; 
do
   CHOICE=$(dialog --clear \
         --backtitle "$BACKTITLE" \
         --title "$TITLE" \
         --menu "$MENU" \
         $HEIGHT $WIDTH $CHOICE_HEIGHT \
         "${OPTIONS[@]}" \
         2>&1 >/dev/tty)
   if [ -n "$CHOICE" ]
   then
      reset
      echo "${CHOICE}"
      sleep 5 
   fi
done