如何为 bash 脚本制作 GUI?

我想为我的脚本制作一些图形对话框,但不知道如何做。 我听说 GTK 服务器什么的。 如果有人知道如何将 Bash 与 tcl/tk 连接起来,我也会很满意。

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

有什么想法吗?

编辑: 谢谢你的回答,但我不希望“图形”的颜色在控制台,但图形窗口,我可以移动,最小化等。 我将测试 xmessage,但我不认为这将是我所寻找的。

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

145514 次浏览

有一个命令叫做 dialog,它使用 ncurses 库

http://pwet.fr/man/linux/commandes/dialog

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

您可以使用基于 诅咒对话或基于 俚语鞭尾

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

在实际使用 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 + +)

我想做一些奇怪的游戏,简单的界面,进度条的健康或东西是我想要的例子。变量“健康”是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 来编写您的 game-thing 脚本,因为这听起来像是在突破 shell 脚本的界限。.

如果安装了 Qt/KDE,可以使用 对话,它会弹出一个 Qt 对话框窗口。您可以很容易地指定显示一个是/否对话框,确定/取消,简单的文本输入,密码输入等。然后您就可以访问 shell 中这些对话框的返回值。

如果你想用 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。当然,它不像集成到编程语言中的工具箱那样灵活,但在某些情况下它确实很有用。

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

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

它的目的是用相同的命令设置,冷漠地处理所有四个大型工具“ k 对话框”、“ X 对话框”、“ c 对话框”和“ zenity”,这取决于 X 是否运行,D.E 是否是 KDE 或 Gnome 或其他。有15种不同的功能(其中有两个称为“进步”和“调整”) ..。

:-)