Подтвердить что ты не робот

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

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

Пожалуйста, не публикуйте что-то вроде "change to С++", потому что мой проект должен быть script в Bash; других вариантов нет.

Любые идеи?

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

ИЗМЕНИТЬ 2: Я не хочу создавать простой диалог, например "да/нет", но какой-то интерфейс, например, индикаторы хода и кнопки, что-то вроде игры.

4b9b3361

Ответ 1

Прежде чем использовать графические интерфейсы, используйте консольные подсказки. Довольно часто вы можете уйти простыми "y/n?" подсказки, которые в bash вы достигаете с помощью команды read.

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

Если консольное приглашение просто не вырезает его, Zenity действительно проста в использовании, например:

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

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

Если вам нужно что-то более сложное, чем то, что читает или Zenity, "лучший вариант для С++" - это лучший метод (хотя я бы рекомендовал Python/Ruby над С++ для таких задач замены shell- script)

Я хочу сделать простой интерфейс для какой-то странной игры, индикатор прогресса для здоровья или что-то такое, что я хочу. Переменная "ЗДОРОВЬЕ" - 34, поэтому сделать индикатор выполнения заполнен в 34/100

В качестве командной строки script он использует 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 также имеет Диалог выполнения,

#!/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 не может делать то, что вам нужно, подумайте о том, как писать свою игру как "правильную" script в Python/Ruby/Perl/С++/etc, так как кажется, что вы нажимаете границы того, что может сделать оболочка script..

Ответ 2

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

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

Ответ 3

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

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

Ответ 4

Хорошо, если вы можете использовать Tcl/Tk в своей среде, вы, вероятно, должны написать TCL script и использовать это. Вы также можете посмотреть пожелание.

Ответ 5

Вы можете использовать dialog, который ncurses или whiptail, который slang на основе.

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

Ответ 6

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

Ответ 7

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

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

Bye : -)

Ответ 8

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

Ответ 9

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

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