如何为bash脚本制作GUI?

lau*_*iys 64 gtk bash user-interface tk-toolkit tcl

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

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

有任何想法吗?

编辑: 谢谢你的答案,但我不希望控制台中的颜色"图形",但我可以移动的图形窗口,最小化等我会测试xmessage,但我不认为这将是我正在寻找的.

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

dbr*_*dbr 62

在实际使用GUI对话之前,请考虑使用控制台提示.很多时候你可以通过简单的"y/n?"来逃避.提示,这是你通过read命令实现的bash ..

read -p "Do something? ";
if [ $REPLY == "y" ]; then
    echo yay;
fi
Run Code Online (Sandbox Code Playgroud)

如果控制台提示不会削减它,Zenity非常容易使用,例如:

      zenity --error --text="Testing..."
      zenity --question --text="Continue?"
Run Code Online (Sandbox Code Playgroud)

这仅适用于Linux/Gnome(或者更确切地说,它只会在此类系统上默认安装).该read方法适用于几乎任何平台(包括无头机器或通过SSH)

如果你需要比读取或Zenity提供的更复杂的东西,"改用C++"确实是最好的方法(尽管我推荐使用Python/Ruby over C++来实现这样的shell脚本替换任务)

我想为一些奇怪的游戏做简单的界面,健康的进度条或者某些东西就是我想要的例子.变量"HEALTH"为34,因此进度条填写为34/100

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

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

或者规范化1到78之间的值(这样就不会在标准终端大小上进行换行):

$ python -c "import os; print '*' * int((int(os.environ.get('HEALTH', 0)) / 100.0) * 78)"
Run Code Online (Sandbox Code Playgroud)

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
Run Code Online (Sandbox Code Playgroud)

正如我之前所说的,如果Zenity无法满足您的需求,请将您的游戏内容编写为Python/Ruby/Perl/C++ /等中的"正确"脚本,因为它听起来像是在推动shell的界限-script可以做..


nxa*_*adm 21

如果你想用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
Run Code Online (Sandbox Code Playgroud)

结合这些小部件,您可以创建非常实用的GUI.当然,它不像集成到编程语言中的工具包那样灵活,但在某些情况下它确实非常有用.


Pie*_*rre 14

有一个命令dialog,它使用ncurses库." 对话框是一个程序,它允许您使用shell脚本中的对话框呈现各种问题或显示消息.这些类型的对话框已实现(尽管并非所有对话框都必须编译成对话框) "

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


Cha*_*tin 13

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


Ren*_*ino 11

你可以使用对话框ncurses的依据或鞭尾俚语为主.

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


dmi*_*_vk 6

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


小智 6

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

如果DE是KDE或Gnome或其他,则打算使用相同的命令设置,无差别地处理所有四个大工具"kdialog","Xdialog","cdialog"和"zenity",具体取决于X是否正在运行.有15种不同的功能(其中有两种叫做"进步"和"调整")......

再见:-)