Cómo hacer una GUI para scripts bash? [cerrado]


Quiero hacer algunos diálogos gráficos para mi script pero no sé cómo. He oído algo sobre GTK-Server o algo así. Si alguien sabe cómo vincular Bash con tcl / tk también estoy satisfecho.

Por favor, no publiques algo como "cambiar a C++" porque mi proyecto debe ser un script en Bash; no hay otras opciones.

¿Alguna idea?

EDITAR: Gracias por las respuestas, pero no quiero "gráficos" como en colores en la consola, pero las ventanas gráficas que puede moverse, minimizar, etc. Probaré xmessage, pero no creo que eso sea lo que estoy buscando.

EDITAR 2: No quiero hacer un diálogo simple como sí / no, pero alguna interfaz como barras de progreso y botones, algo así como un juego.

Author: lauriys, 2009-05-30

9 answers

Antes de usar diálogos GUI, considere usar indicaciones de consola. Muy a menudo se puede salir con la suya con simple " y / n?"indicaciones, que en bash se logra a través de la read command ..

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

Si los prompt de la consola simplemente no lo cortan, Zenity es realmente fácil de usar , por ejemplo:

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

Esto solo funciona en Linux/Gnome (o mejor dicho, solo se instalará por defecto en dichos sistemas). El método read funcionará en casi cualquier plataforma (incluyendo máquinas sin cabeza, o vía SSH)

Si necesita algo más complejo que lo que read o Zenity proporciona," cambiar a C++ " es realmente el mejor método (aunque recomendaría Python/Ruby sobre C++ para tales tareas de reemplazo de shell-script)

Quiero hacer interfaz simple para algún juego extraño, la barra de progreso para la salud o algo así es el ejemplo de lo que quiero. Variable "SALUD" es 34, por lo que hacer barra de progreso rellenado en 34/100

Como un script de línea de comandos, usaría Python:

$ export HEALTH=34
$ python -c "import os; print '*' * int(os.environ.get('HEALTH', 0))"
**********************************

O para normalizar los valores entre 1 y 78 (para no obtener un ajuste de línea en un tamaño de terminal estándar):

$ python -c "import os; print '*' * int((int(os.environ.get('HEALTH', 0)) / 100.0) * 78)"

Zenity también tiene un Diálogo de progreso ,

#!/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

Como dije antes, si Zenity no puede hacer lo que necesita, busque escribir su juego como un script "adecuado" en Python/Ruby/Perl/C++/etc, ya que suena como si estuviera empujando los límites de lo que un script de shell puede hacer..

 57
Author: dbr,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-02-19 12:55:12

Si desea escribir una interfaz gráfica de usuario en bash, zenity es el camino a seguir. Esto es lo que puedes hacer con él:

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

Combinando estos widgets puedes crear GUI bastante usables. Por supuesto, no es tan flexible como un kit de herramientas integrado en un lenguaje de programación, pero en algunos casos es realmente útil.

 19
Author: nxadm,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-05-10 20:43:03

Hay un comando llamado dialog que usa la biblioteca ncurses. " Dialog es un programa que le permitirá presentar una variedad de preguntas o mostrar mensajes utilizando cuadros de diálogo de un script de shell. Estos tipos de cuadros de diálogo se implementan (aunque no todos se compilan necesariamente en diálogo)"

Véase http://pwet.fr/man/linux/commandes/dialog

 13
Author: Pierre,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-05-29 20:44:34

Bueno, si puede usar Tcl/Tk en su entorno, probablemente debería escribir un script TCL y usarlo. También puedes mirar wish .

 13
Author: Charlie Martin,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-05-29 20:46:13

Puedes usar dialog que está basado en ncurses o whiptail que está basado en slang.

Creo que ambos tienen enlaces GTK o Tcl/Tk.

 11
Author: Renato Aquino,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-05-29 20:52:31

Puede gtk-server para esto. Gtk-server es un programa que se ejecuta en segundo plano y proporciona una interfaz basada en texto para permitir que otros programas (incluidos los scripts bash) lo controlen. Tiene ejemplos para Bash (http://www.gtk-server.org/demo-ipc.bash.txt, http://www.gtk-server.org/demo-fifo.bash.txt)

 6
Author: dmitry_vk,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-05-30 06:25:50

Por favor, echa un vistazo a mi biblioteca: http://sites.google.com/site/easybashgui

Está destinado a manejar, con los mismos comandos establecidos, indistintamente las cuatro grandes herramientas "kdialog", "Xdialog", "cdialog" y "zenity", dependiendo de si X se está ejecutando o no, si D. E. es KDE o Gnome u otro. Hay 15 funciones diferentes ( entre ellas hay dos llamadas "progreso" y "ajuste" )...

Adiós :-)

 6
Author: vaisarger,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-05-27 06:50:11

Si tiene Qt/KDE instalado, puede usar kdialog, que abre una ventana de diálogo de Qt. Puede especificar fácilmente para mostrar un cuadro de diálogo Sí/No, Aceptar / Cancelar, entrada de texto simple, entrada de contraseña, etc. A continuación, tiene acceso a los valores devueltos de estos diálogos en el shell.

 3
Author: Brian Carper,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-05-29 21:03:58

Aparentemente alguien ha escrito una interfaz bash para GTK+. No estoy seguro de si puedes hacerlo funcionar fácilmente, pero podría valer la pena intentarlo. Lo puedes encontrar aquí:

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

 2
Author: Tamas Czinege,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-05-29 20:43:00