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


Я хочу сделать некоторые графические диалоги для моего скрипта, но не знаю как. Я слышал что-то о GTK-сервере или что-то в этом роде. Если кто-то знает, как связать Bash с tcl/tk, я также буду доволен.

пожалуйста, не пишите что-то вроде "изменить на C++", потому что мой проект должен быть скрипт в Bash; других вариантов нет.

какие идеи?

EDIT: Спасибо за ответы, но я не хочу "графики", как в цветах в консоли, но графические окна, которые я могу перемещать, минимизировать и т. д. Я буду тестировать xmessage, но я не думаю, что будет то, что я ищу.

EDIT 2: Я не хочу делать простой диалог, как Да/нет, но некоторые интерфейсы, такие как индикаторы прогресса и кнопки, что-то вроде игры.

9 61

9 ответов:

прежде чем использовать диалоги GUI, рассмотрите возможность использования подсказок консоли. Довольно часто вы можете уйти с простым "y / n?"подсказки, которые в баше вы добиваетесь через read команда..

read -p "Do something? ";
if [ $REPLY == "y" ]; then
    echo yay;
fi

если консоли просто не будет сократить его, Зениты действительно прост в использовании, например:

      zenity --error --text="Testing..."
      zenity --question --text="Continue?"

это работает только на Linux / Gnome (или, скорее, он будет установлен только по умолчанию на таких системах). Элемент read метод работать практически на любой платформе (включая безголовые машины, или через SSH)

Если вам нужно что-то более сложное, чем то, что предоставляет read или Zenity, "change to C++"-действительно лучший метод (хотя я бы рекомендовал 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)"

Зенит также имеет Прогресса,

#!/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-скрипт..

Если вы хотите написать графический интерфейс в 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

комбинируя эти виджеты, вы можете создать довольно удобные графические интерфейсы. Конечно, это не так гибко, как инструментарий, интегрированный в язык программирования, но в некоторых случаях это действительно полезно.

есть команда под названием dialog, который использует библиотеку ncurses. "Dialog-это программа, которая позволит вам задавать различные вопросы или отображать сообщения с помощью диалоговых окон из сценария оболочки. Эти типы диалоговых окон реализованы (хотя не все обязательно компилируются в диалог)"

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

Ну, если вы можете использовать Tcl / Tk в своей среде, вы, вероятно, должны написать сценарий TCL и использовать его. Вы также можете посмотреть на желаю.

вы могли бы использовать dialog что это ncurses или настоящих что это сленг на основе.

Я думаю, что у обоих есть привязки GTK или Tcl/Tk.

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

пожалуйста, взгляните на мою библиотеку: http://sites.google.com/site/easybashgui

Он предназначен для обработки, с одинаковым набором команд, безразлично все четыре больших инструмента "kdialog", "Xdialog", "cdialog" и "zenity", в зависимости от того, работает ли X или нет, если D. E. является KDE или Gnome или другим. Существует 15 различных функций (среди них есть две под названием "Прогресс" и "настройка" )...

пока : -)

Если у Вас установлен Qt/KDE, вы можете использовать kdialog, который открывает диалоговое окно Qt. Вы можете легко указать, чтобы отобразить диалоговое окно да/нет, ОК/отмена, простой ввод текста, ввод пароля и т. д. Затем у вас есть доступ к возвращаемым значениям из этих диалоговых окон в оболочке.

видимо кто-то написал интерфейс bash для GTK+. Я не уверен, что вы можете заставить его работать легко, но это может стоить попробовать. Вы можете найти его здесь:

http://home.eol.ca/~parkw / index. html#gtk