Поле ввода Bash kdialog не закрывается?Возможно плохое возвращение из msgbox - PullRequest
0 голосов
/ 20 ноября 2018

Я пишу в 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

1 Ответ

0 голосов
/ 21 ноября 2018

После некоторого сна я легко понял эту проблему.Я удалил оператор case и использовал вместо него операторы if.Программа не выйдет из оператора case из-за возврата 0 из --msgbox в kdialog.

#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;  
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...