在实际使用 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-script-replacement 任务,我建议使用 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++/etc 中的“适当”脚本,因为这听起来像是在突破外壳的界限-脚本可以做..