User interface 如何为bash脚本制作GUI?

User interface 如何为bash脚本制作GUI?,user-interface,bash,gtk,tcl,tk,User Interface,Bash,Gtk,Tcl,Tk,我想为我的脚本制作一些图形对话框,但不知道如何制作。 我听说了一些关于GTK服务器之类的东西。 如果有人知道如何将Bash与tcl/tk联系起来,我也会感到满意 请不要发布类似“更改为C++”的内容,因为我的项目 必须是Bash中的脚本;没有其他选择 有什么想法吗 编辑: 谢谢你的回答,但我不想要控制台中颜色的“图形”,而是可以移动、最小化等的图形窗口。 我将测试xmessage,但我认为这不是我要搜索的 编辑2: 我不想创建一个简单的对话框,比如yes/no,但是一些界面,比如进度条和按钮,比

我想为我的脚本制作一些图形对话框,但不知道如何制作。 我听说了一些关于GTK服务器之类的东西。 如果有人知道如何将Bash与tcl/tk联系起来,我也会感到满意

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

有什么想法吗

编辑: 谢谢你的回答,但我不想要控制台中颜色的“图形”,而是可以移动、最小化等的图形窗口。 我将测试
xmessage
,但我认为这不是我要搜索的

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

有一个名为
dialog
的命令,它使用ncurses库。“Dialog是一个程序,它允许您使用shell脚本中的对话框来显示各种问题或显示消息。这些类型的对话框都已实现(但并非所有对话框都必须编译为Dialog)”


请参见

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

您可以使用基于的或基于的


我认为两者都有GTK或TCL/TK绑定。

在实际使用GUI对话之前,考虑使用控制台提示。通常,您可以通过简单的“y/n?”提示逃脱惩罚,在bash中,您可以通过

例如,如果控制台提示无法将其剪切,则实际上是:

      zenity --error --text="Testing..."
      zenity --question --text="Continue?"
这只适用于Linux/Gnome(或者更确切地说,它只在默认情况下安装在此类系统上)。
read
方法几乎可以在任何平台上工作(包括无头机器或通过SSH)

如果你需要比读或ZeNess提供的任何东西更复杂的话,“改变C++”是最好的方法(尽管我建议在C++上使用Python/Ruby来代替shell脚本替换)

我想做一些奇怪的游戏,健康或东西的进度条简单的界面是我想要的例子。变量“HEALTH”是34,所以在34/100中填写进度条

作为命令行脚本,它将使用Python:

$ export HEALTH=34
$ python -c "import os; print '*' * int(os.environ.get('HEALTH', 0))"
**********************************
或者将1和78之间的值标准化(这样就不会在标准端子尺寸上进行换行):

Zenity也有一个


正如我之前所说的,如果Zenity不能满足您的需要,那么可以考虑用Python/Ruby/Perl/C++/等编写一个“合适”的脚本,因为这听起来像是在推动shell脚本的功能范围。

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

如果您想在bash中编写图形用户界面,这是一种方法。这就是你可以用它做的:

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服务器是一个在后台运行的程序,它提供基于文本的界面,允许其他程序(包括bash脚本)控制它。它有Bash(,)的示例请查看我的库:

它旨在使用相同的命令集,处理所有四大工具“kdialog”、“Xdialog”、“cdialog”和“zenity”,这取决于X是否正在运行,D.E.是KDE还是Gnome或其他。有15种不同的功能(其中有两种称为“进步”和“调整”)

再见
:-)

有趣的是,我刚安装了一个版本的实用程序,就看到了你的答案。我认为Dialog工作得很好。除了
Dialog
实用程序之外,还应该提到
whiptail
。他们之间甚至保持了一定程度的兼容性。我不想要“是/否”,但我想为一些奇怪的游戏制作简单的界面,健康进度条或其他东西就是我想要的例子。变量“HEALTH”是34,所以将进度条填入34/100。我想这样做。上面的链接已断开:(非常容易使用:
禁止您没有权限访问此服务器上的/users/zenity/stable/。Apache/2.2.15(Red Hat)位于help.gnome.org端口80的服务器很酷,因此它是一个适配器。需要支持的工具吗?或者你会使用lib找到的任何工具,与检测到的环境兼容吗?这一个实际上很酷。bash程序员不必担心用户将使用哪个平台KDE或gnome;它会自动检测到环境nt并使用可用的库相应地显示UI。您肯定想要
zenity
。在过去有“dtksh”可以访问Motif库的ksh-93实现。您可以设置shell函数回调,并使用shell脚本生成完整的图形应用程序。它具有对话框、按钮、文本框、单选按钮等功能。看看这个问题有8年历史。未关闭的复制:听起来很有趣。不幸的是,似乎没有用于它的.deb包。无论如何都将尝试编译它。但这不是问题,除非手册没有用处:
$ python -c "import os; print '*' * int((int(os.environ.get('HEALTH', 0)) / 100.0) * 78)"
#!/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
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