如何为bash脚本创build一个GUI?

我想为我的脚本做一些graphics化的对话框,但不知道如何。 我听到有关GTK-Server或类似的东西。 如果有人知道如何将Bash与tcl / tk连接,我也会很满意。

请不要发布类似“改为C ++”的东西,因为我的项目必须是Bash中的脚本; 没有其他的select。

有任何想法吗?

编辑:谢谢你的答案,但我不想在控制台中的颜色“graphics”,但我可以移动,最小化等graphics窗口我会testingxmessage ,但我不认为这将是我正在寻找对于。

编辑2:我不想做一个简单的对话框,如是/否,但一些像进度条和button的界面,就像一个游戏。

在实际使用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 ++”确实是最好的方法(尽pipe我推荐Python / Ruby比C ++更适合这样的shell脚本replace任务)

我想为一些奇怪的游戏做简单的界面,健康的进度条或者是我想要的例子。 variables“健康”是34,所以进度栏填写34/100

作为一个命令行脚本,它会使用Python:

 $ export HEALTH=34 $ python -c "import os; print '*' * int(os.environ.get('HEALTH', 0))" ********************************** 

或者规范1到78之间的值(所以你不要在标准的terminal尺寸上换行):

 $ 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的界限 – 脚本可以做..

如果你想在bash中编写一个graphics用户界面, 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 

结合这个小部件,你可以创build漂亮的GUI。 当然,它不是一个灵活的工具集成到编程语言,但在某些情况下,它真的很有用。

有一个命令叫做使用ncurses库的dialog 。 “ Dialog是一个程序,它可以让你使用shell脚本中的对话框来显示各种问题或者显示消息,这些types的对话框是实现的(尽pipe不是所有的对话框都必须编译成对话框)

请参阅http://pwet.fr/man/linux/commandes/dialog

那么,如果你可以在你的环境中使用Tcl / Tk,你可能应该写一个TCL脚本并使用它。 你也可以看看希望 。

你可以使用基于ncurses的对话框或基于俚语的whiptail 。

我认为都有GTK或Tcl / Tk绑定。

你可以为此gtk-server 。 Gtk-server是一个在后台运行的程序,它提供基于文本的界面以允许其他程序(包括bash脚本)控制它。 它有Bash的例子( http://www.gtk-server.org/demo-ipc.bash.txt,http://www.gtk-server.org/demo-fifo.bash.txt

请查看我的图书馆: http : //sites.google.com/site/easybashgui

如果DE是KDE或者Gnome或者其它,根据X是否运行,用相同的命令设置,无差别地处理所有四个大工具“kdialog”,“Xdialog”,“cdialog”和“zenity”。 有15个不同的function(其中有两个称为“进度”和“调整”)…

再见:-)

如果你安装了Qt / KDE,你可以使用kdialog ,popup一个Qt对话窗口。 您可以轻松地指定显示是/否对话框,确定/取消,简单的文本input,密码input等。然后,您可以访问shell中这些对话框的返回值。

显然有人写了GTK +的bash接口。 我不确定你是否可以轻松地工作,但可能值得一试。 你可以在这里find它:

http://home.eol.ca/~parkw/index.html#gtk