如何为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不是所有的对话框都必须编译成对话框) ”
那么,如果你可以在你的环境中使用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它: