我在bash中编写代码,使用Ubuntu 18.04,我在使用kdialog。我制作了一个简单的魔术八球主题程序,我不能关闭输入框并退出程序,相反,我陷入了一个循环。这段代码最初是在BASH dialog中生成的,我决定将其更改为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返回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;

10-07 19:53