Как сделать графический интерфейс для скриптов bash? [закрытый]
Я хочу сделать некоторые графические диалоги для моего скрипта, но не знаю как. Я слышал что-то о GTK-сервере или что-то в этом роде. Если кто-то знает, как связать Bash с tcl/tk, я также буду доволен.
пожалуйста, не пишите что-то вроде "изменить на C++", потому что мой проект должен быть скрипт в Bash; других вариантов нет.
какие идеи?
EDIT:
Спасибо за ответы, но я не хочу "графики", как в цветах в консоли, но графические окна, которые я могу перемещать, минимизировать и т. д.
Я буду тестировать xmessage
, но я не думаю, что будет то, что я ищу.
EDIT 2: Я не хочу делать простой диалог, как Да/нет, но некоторые интерфейсы, такие как индикаторы прогресса и кнопки, что-то вроде игры.
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-это программа, которая позволит вам задавать различные вопросы или отображать сообщения с помощью диалоговых окон из сценария оболочки. Эти типы диалоговых окон реализованы (хотя не все обязательно компилируются в диалог)"
Ну, если вы можете использовать Tcl / Tk в своей среде, вы, вероятно, должны написать сценарий TCL и использовать его. Вы также можете посмотреть на желаю.
вы можете 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. Вы можете легко указать, чтобы отобразить диалоговое окно да/нет, ОК/отмена, простой ввод текста, ввод пароля и т. д. Затем у вас есть доступ к возвращаемым значениям из этих диалоговых окон в оболочке.