在实际使用GUI对话框之前,考虑使用控制台提示。很多情况下,你可以通过简单的“y/n?”提示完成,而在bash中,你可以通过read
命令实现。
read -p "Do something? ";
if [ $REPLY == "y" ]; then
echo yay;
fi
如果控制台提示无法满足需求,
Zenity非常
易于使用,例如:
zenity --error --text="Testing..."
zenity --question --text="Continue?"
这只适用于Linux/Gnome系统(或者说,仅默认安装在这些系统上)。read
方法可以在几乎任何平台上工作(包括无头机器或通过SSH)
如果您需要比read
或Zenity提供的更复杂的内容,“转到C ++”确实是最好的方法(尽管对于这种shell脚本替换任务,我建议使用Python/Ruby而不是C ++)
我想为一些奇怪的游戏制作简单的界面,例如健康进度条。 变量“HEALTH”为34,因此将进度条填充为34/100
作为命令行脚本,它会使用Python:
$ export HEALTH=34
$ python -c "import os; print '*' * int(os.environ.get('HEALTH', 0))"
**********************************
或者将值在1至78之间归一化(这样在标准终端大小下不会出现换行):
$ python -c "import os; print '*' * int((int(os.environ.get('HEALTH', 0)) / 100.0) * 78)"
Zenity还具有一个进度对话框
#!/bin/sh
(
echo "10" ; sleep 1
echo "# Updating mail logs" ; sleep 1
echo "20" ; sleep 1
echo "# Resetting cron jobs" ; sleep 1
echo "50" ; sleep 1
echo "This line will just be ignored" ; sleep 1
echo "75" ; sleep 1
echo "# Rebooting system" ; sleep 1
echo "100" ; sleep 1
) |
zenity --progress \
--title="Update System Logs" \
--text="Scanning mail logs..." \
--percentage=0
if [ "$?" = -1 ] ; then
zenity --error \
--text="Update canceled."
fi
如我之前所说,如果Zenity无法满足你的需求,建议你考虑用Python/Ruby/Perl/C++等语言编写一个“正式”的脚本来实现游戏功能,因为似乎你正在挑战shell脚本的极限。
zenity
。 - jmctkbash
.。 - phil294