linux - Bash kdialog 输入框不关闭?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 返回 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;
推荐阅读
- dynamics-crm - 报告未在 CRM Dynamics Online 中的选择上运行(灰色)
- ios - IOS Swift 中的多线程
- python - 一个模块在 Anaconda 提示符下工作,但不在 Spyder 中
- c# - 将日期时间存储在天蓝色表存储中
- rust - 如何将 crypto::sha2::Sha256 哈希转换为 &[u8] 表示?
- stargazer - Stargazer 在负数值的减号周围加上额外的 $...$
- css - 使用 Angular-CLI 进行 CSS 优化后处理
- ios - React Native标签栏闪烁
- jquery - 隐藏已附加内容的问题
- python - Matplotlib 自定义样式:不同的刻度颜色和刻度标签颜色