【问题标题】:How to make a GUI for bash scripts? [closed]如何为 bash 脚本制作 GUI? [关闭]
【发布时间】:2010-10-30 00:08:25
【问题描述】:

我想为我的脚本制作一些图形对话框,但不知道怎么做。 我听说了一些关于 GTK-Server 或类似的东西。 如果有人知道如何将 Bash 与 tcl/tk 联系起来,我也很满意。

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

有什么想法吗?

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

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

【问题讨论】:

  • 你肯定想要zenity
  • 在过去,“dtksh”是一个可以访问 Motif 库的 ksh-93 实现。您可以设置 shell 函数回调并使用 shell 脚本制作完整的图形应用程序。它具有对话框、按钮、文本框、单选按钮、...
  • 看看tkbash.
  • 问题是8岁。

标签: user-interface bash gtk tcl tk


【解决方案1】:

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

如果您需要比 read 或 Zenity 提供的更复杂的东西,“更改为 C++”确实是最好的方法(尽管对于此类 shell-script-replacement 任务,我建议使用 Python/Ruby 而不是 C++)

我想为一些奇怪的游戏做简单的界面,健康的进度条什么的就是我想要的例子。变量“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++/etc 中的“适当”脚本,因为这听起来像是在挑战shell脚本可以做什么..

【讨论】:

  • 我不想要yes/no,但我想为一些奇怪的游戏做简单的界面,健康的进度条或其他东西就是我想要的例子。变量“HEALTH”是 34,所以让进度条填写 34/100。我想做的事。
  • 上面的Progress Dialog链接坏了:(
  • 所以好用:Forbidden You don't have permission to access /users/zenity/stable/ on this server. Apache/2.2.15 (Red Hat) Server at help.gnome.org Port 80
【解决方案2】:

如果您想在 bash 中编写图形 UI,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。当然,它不如集成到编程语言中的工具包灵活,但在某些情况下确实很有用。

【讨论】:

【解决方案3】:

有一个名为dialog 的命令使用ncurses 库。 "Dialog 是一个程序,可让您使用 shell 脚本中的对话框提出各种问题或显示消息。这些类型的对话框已实现(尽管并非所有都必须编译到对话框中) "

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

【讨论】:

  • 很有趣,当我发现您的答案时,我只是在安装该实用程序的一个版本。我认为对话框效果很好。
  • 除了dialog 实用程序之外,还应提及whiptail。它们甚至在彼此之间保持一定程度的兼容性。
【解决方案4】:

好吧,如果您可以在您的环境中使用 Tcl/Tk,您可能应该编写一个 TCL 脚本并使用它。你也可以看看wish

【讨论】:

  • 但这不是 bash
【解决方案5】:

您可以使用基于ncursesdialog 或基于slangwhiptail

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

【讨论】:

    【解决方案6】:

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

    【讨论】:

    • 听起来很有趣。不幸的是,它似乎没有 .deb 包。无论如何都会尝试编译它。
    【解决方案7】:

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

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

    再见 :-)

    【讨论】:

    • 酷,所以它是一个适配器。是否需要支持的工具,或者您的 lib 将使用它找到的任何东西,与检测到的环境兼容?
    • 这个其实很酷。 bash 程序员不必担心用户将使用 KDE 或 gnome 哪个平台;它会自动检测环境并使用可用的库相应地显示 UI。
    【解决方案8】:

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

    【讨论】:

      猜你喜欢
      • 2015-01-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-10-31
      相关资源
      最近更新 更多