it-swarm.com.ru

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

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

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

Есть идеи?

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

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

63
lauriys

Прежде чем использовать диалоги GUI, подумайте об использовании консольных запросов. Довольно часто вы можете сойти с простого "у/п?" подсказки, которые в 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)

Если вам нужно что-то более сложное, чем то, что предоставляет read или Zenity, "переход на C++" - действительно лучший метод (хотя я бы рекомендовал Python/Ruby поверх C++ для таких задач по замене сценариев Shell)

Я хочу сделать простой интерфейс для какой-то странной игры, индикатор прогресса для здоровья или что-то еще - пример того, чего я хочу. Переменная "ЗДОРОВЬЕ" равна 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 также имеет диалог прогресса ,

#!/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 -скрипт может сделать ..

61
dbr

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

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

20
nxadm

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

смотрите http://pwet.fr/man/linux/commandes/dialog

13
Pierre

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

13
Charlie Martin

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

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

11
Renato Aquino

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

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

До свидания :-)

6
vaisarger

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

6
dmitry_vk

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

3
Brian Carper

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

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

2
Tamas Czinege