как сделать графический интерфейс для скриптов bash?

<p>я хочу сделать несколько графических диалогов для моего сценария, но не знаю как. я слышал что-то о gtk-сервере или что-то подобное. если кто-то знает, как связать bash с tcl/tk, я тоже буду доволен.</p><p>пожалуйста, не публикуйте что-то вроде "change to c++", потому что мой проект должен быть скриптом на bash; других вариантов нет.</p><p>есть идеи?</p><p><strong>edit:</strong> спасибо за ответы, но я не хочу "графику", как цвета в консоли, а графические окна, которые я могу перемещать, сворачивать и т.д. я буду тестировать <code>xmessage</code>, но я не думаю, это будет то, что я ищу.</p><p><strong>правка 2:</strong> я не хочу создавать простой диалог, такой как да/нет, но какой-то интерфейс, например, индикаторы выполнения и кнопки, что-то вроде игры.</p>

<p>прежде чем использовать диалоги gui, подумайте об использовании консольных запросов. довольно часто вы можете сойти с простого "у/п?" подсказки, которые в bash достигаются с помощью команды <a href="http://www.manpagez.com/man/2/read/"><code>read</code></a> ..</p><pre><code>read -p "do something? "; if [ $reply == "y" ]; then echo yay; fi если консольная подсказка просто не обрезает, <a href="http://freshmeat.net/projects/zenity">zenity действительно <a href="http://library.gnome.org/users/zenity/stable/">прост в использовании , например: zenity --error --text="testing..." zenity --question --text="continue?" это работает только в linux/gnome (точнее, оно будет установлено по умолчанию только на таких системах). метод read будет работать практически на любой платформе (включая безголовые машины или через ssh)если вам нужно что-то более сложное, чем то, что предоставляет read или zenity, "переход на c++" - действительно лучший метод (хотя я бы рекомендовал python/ruby поверх c++ для таких задач по замене сценариев shell)<blockquote> я хочу сделать простой интерфейс для какой-то странной игры, индикатор прогресса для здоровья или что-то еще - пример того, чего я хочу. переменная "здоровье" равна 34, поэтому сделать индикатор выполнения заполненным в 34/100 </blockquote>в качестве сценария командной строки он будет использовать 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)" </code></pre><p>zenity также имеет <a href="https://help.gnome.org/users/zenity/stable/progress.html.en">диалог прогресса</a> ,</p><pre><code>#!/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 </code></pre><p>как я уже говорил, если zenity не может делать то, что вам нужно, подумайте над написанием своей игровой вещи как "правильного" скрипта на python/ruby/perl/c++/etc, так как кажется, что вы раздвигаете границы того, что делает shell -скрипт может сделать ..</p>

<p>если вы хотите написать графический пользовательский интерфейс в bash, <a href="https://help.gnome.org/users/zenity/">zenity</a> это путь. вот что вы можете сделать с этим:</p><pre><code>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 </code></pre><p>комбинируя эти виджеты, вы можете создать довольно удобный графический интерфейс. конечно, он не такой гибкий, как инструментарий, интегрированный в язык программирования, но в некоторых случаях он действительно полезен.</p>

<p>есть команда с именем <code>dialog</code>, которая использует библиотеку ncurses. "<em> dialog - это программа, которая позволит вам задавать различные вопросы или отображать сообщения с помощью диалоговых окон из сценария shell. эти типы диалоговых окон реализованы (хотя не все обязательно скомпилированы в диалог) </em>"</p><p>смотрите <a href="http://pwet.fr/man/linux/commandes/dialog">http://pwet.fr/man/linux/commandes/dialog</a> </p>

<p>что ж, если вы можете использовать tcl/tk в своей среде, вам, вероятно, следует написать сценарий tcl и использовать его. вы также можете посмотреть на <a href="http://wiki.tcl.tk/2364">желание</a> .</p>

<p>вы можете использовать <a href="http://invisible-island.net/dialog/">диалог</a> , который <a href="http://invisible-island.net/ncurses/ncurses.html">ncurses</a> основан или <a href="http://nixdoc.net/man-pages/linux/whiptail.1.html">whiptail</a> , который <a href="http://www.jedsoft.org/slang">сленг</a> основан.</p><p>я думаю, что оба имеют привязки gtk или tcl/tk.</p>

<p>пожалуйста, взгляните на мою библиотеку: <a href="http://sites.google.com/site/easybashgui">http://sites.google.com/site/easybashgui</a> </p><p>он предназначен для одинакового управления всеми четырьмя большими инструментами "kdialog", "xdialog", "cdialog" и "zenity", в зависимости от того, работает x или нет, если d.e. это kde или gnome или другое. есть 15 различных функций (среди них две, называемые "прогресс" и "настроить") ...</p><p>до свидания :-)</p>

<p>вы можете <a href="http://www.gtk-server.org/">gtk-server</a> для этого. gtk-сервер - это программа, которая работает в фоновом режиме и предоставляет текстовый интерфейс, позволяющий другим программам (включая скрипты bash) управлять им. у него есть примеры для bash ( <a href="http://www.gtk-server.org/demo-ipc.bash.txt">http://www.gtk-server.org/demo-ipc.bash.txt</a> , <a href="http://www.gtk-server.org/demo-fifo.bash.txt">http://www.gtk-server.org/demo -fifo.bash.txt</a> )</p>

<p>если у вас установлен qt/kde, вы можете использовать <a href="http://techbase.kde.org/development/tutorials/shell\_scripting\_with\_kde\_dialogs">kdialog</a> , который открывает диалоговое окно qt. вы можете легко указать отображение диалогового окна "да/нет", "ок/отмена", простой ввод текста, ввод пароля и т.д. после этого у вас будет доступ к возвращаемым значениям из этих диалоговых окон в командной консоли.</p>

<p>видимо кто-то написал интерфейс bash для gtk +. я не уверен, сможете ли вы заставить его работать легко, но это стоит попробовать вы можете найти это здесь:</p><p> <a href="http://home.eol.ca/~parkw/index.html#gtk">http://home.eol.ca/~parkw/index.html#gtk</a> </p>