Bash kdialog输入框没有关闭?来自 msgbox 的可能错误 return

Bash kdialog Input Box Not Clossing? Possible bad return from msgbox

我在 bash 编码,使用 Ubuntu 18.04,我正在玩 kdialog。我做了一个简单的魔术八球主题程序,我无法关闭输入框并退出程序,而是陷入了一个循环。此代码最初是在 BASH 对话框中编写的,我决定将其更改为 kdialog。任何帮助将不胜感激。我忽略了一些简单的事情。

#!/bin/bash
#version 3

OUTPUT="TEMP.txt"
>$OUTPUT

while [ true ]
do

shuffle() {
   local i tmp size max rand
   size=${#array[*]}
   max=$(( 32768 / size * size ))

   for ((i=size-1; i>0; i--)); 
    do
      while (( (rand=$RANDOM) >= max )); 
    do :; 
    done
      rand=$(( rand % (i+1) ))
      tmp=${array[i]} 
      array[i]=${array[rand]} 
      array[rand]=$tmp
   done
}

array=( 'It Is Certain' 
'Without A Doubt' 
'Maybe' 
'Signs Point To Yes' 
'Most Likely'
'As I See It, Yes'
'Ask Again Later'
'Concentrate And Ask Again'
'HAHAH No..'
'Ask Again'
'Have Faith In Yourself'
'Very Doubtful'
'Outlook Not So Good'
'My Sources Say No'
'Unknown At This Time' 
'Could Happen Any Moment Now'
'Is That A Joke?'
'Unlikely' )

shuffle

function sayhello(){
    local n=${array[@]}-""
    #display it 
kdialog --msgbox "This Is What I See:  ${array}"
 #--clear --msgbox "${array}" 8 41
}



# show an inputbox
kdialog --title "Welcome " \
--inputbox "Ask and you shall recieve great fortune: " #8 60 

function think_tank(){
progress=$(kdialog --progressbar "hmmm Let Me Think..." 4);
sleep 1;
qdbus $progress Set "" value 1 > /dev/null;
sleep 1;
qdbus $progress Set "" value 2 > /dev/null;
sleep 1;
qdbus $progress Set "" value 3 > /dev/null;
sleep 1;
qdbus $progress Set "" value 4 > /dev/null;
sleep 1;
qdbus $progress close > /dev/null;
sleep 1
#kdialog --title "This is a passive popup" --passivepopup \
#"It will disappear in about 10 seconds" 10

}
# get response
response=$? 

# get data stored in $OUPUT using input redirection
name=$(<$OUTPUT)

case $response in
  0) 
    think_tank
    sayhello ${array[@]}
    ;;
   1) 
    echo "Goodbye For Now." 
exit 0
;;  
  255) 
   echo "Goodbye For Now."
exit 0
;;
esac

#rm $OUTPUT
done
done

睡了一觉后,我很容易就解决了这个问题。我删除了 case 语句并改用 if 语句。由于来自 kdialog 的 --msgbox 的 return 0,程序不会跳出 case 语句。

#made some quick msgbox functions 
    if [ "$?" = 0 ]; 
    then
        think_tank #progress bar
        msg_box #results
    elif [ "$?" = 1 ]; 
    then
        goodbye #closing message box
    exit 0;
    else
        error #error message box
    exit 0;
    fi;