我想为我的脚本制作一些图形对话框,但不知道如何。 我听说过有关GTK-Server或类似的东西。 如果有人知道如何将Bash与tcl / tk联系起来,我也会感到满意。
请不要发布类似“更改为C ++”的内容,因为我的项目 必须是Bash中的脚本;没有其他选择。
有什么想法吗?
修改
谢谢你的答案,但我不希望控制台中的颜色像“图形”,但我可以移动的图形窗口,最小化等。
我将测试xmessage
,但我认为这不是我要搜索的内容。
编辑2: 我不想做一个简单的对话,比如是/否,但有些界面就像进度条和按钮,就像游戏一样。
答案 0 :(得分:61)
在实际使用GUI对话之前,请考虑使用控制台提示。很多时候你可以通过简单的“y / n?”来逃避。提示,在bash中你通过read
command ..
read -p "Do something? ";
if [ $REPLY == "y" ]; then
echo yay;
fi
如果控制台提示不会将其删除,Zenity确实是easy to use,例如:
zenity --error --text="Testing..."
zenity --question --text="Continue?"
这仅适用于Linux / Gnome(或者更确切地说,它只会在此类系统上默认安装)。 read
方法几乎适用于任何平台(包括无头机器或通过SSH)
如果您需要比读取或Zenity提供的更复杂的东西,“更改为C ++”确实是最好的方法(尽管我建议使用Python / Ruby over C ++来实现这样的shell脚本替换任务)
我想为一些奇怪的游戏做简单的界面,健康的进度条或者某些东西就是我想要的例子。变量“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也有Progress Dialog,
#!/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脚本可以做什么..
答案 1 :(得分:20)
如果您想在bash中编写图形用户界面,zenity是可行的方法。这就是你可以用它做的事情:
Application Options:
--calendar Display calendar dialog
--entry Display text entry dialog
--error Display error dialog
--info Display info dialog
--file-selection Display file selection dialog
--list Display list dialog
--notification Display notification
--progress Display progress indication dialog
--question Display question dialog
--warning Display warning dialog
--scale Display scale dialog
--text-info Display text information dialog
组合这些小部件可以创建非常实用的GUI。当然,它不像集成到编程语言中的工具包那么灵活,但在某些情况下它确实非常有用。
答案 2 :(得分:13)
有一个名为dialog
的命令,它使用ncurses库。 “ Dialog是一个程序,它允许您使用shell脚本中的对话框呈现各种问题或显示消息。这些类型的对话框已实现(但并非所有类型都必须编译为对话框) “
答案 3 :(得分:13)
好吧,如果您可以在您的环境中使用Tcl / Tk,您可能应该编写一个TCL脚本并使用它。您也可以查看wish。
答案 4 :(得分:11)
答案 5 :(得分:6)
你可以gtk-server为此。 Gtk-server是一个在后台运行的程序,它提供基于文本的界面,允许其他程序(包括bash脚本)控制它。它包含Bash(http://www.gtk-server.org/demo-ipc.bash.txt,http://www.gtk-server.org/demo-fifo.bash.txt)
的示例答案 6 :(得分:6)
请看看我的图书馆: http://sites.google.com/site/easybashgui
根据相同的命令设置,它无意中处理所有四个大工具“kdialog”,“Xdialog”,“cdialog”和“zenity”,具体取决于X是否正在运行,如果是D.E.是KDE或Gnome或其他。有15种不同的功能(其中有两种叫做“进步”和“调整”)......
再见 : - )
答案 7 :(得分:3)
如果安装了Qt / KDE,可以使用kdialog,弹出Qt对话框窗口。您可以轻松指定显示是/否对话框,确定/取消,简单文本输入,密码输入等。然后您可以在shell中访问这些对话框的返回值。
答案 8 :(得分:2)
显然有人为GTK +编写了一个bash界面。我不确定你能不能轻松搞定,但值得一试。你可以在这里找到它: