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.
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..
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.
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)"
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 .
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.
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)
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 :-)
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.
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í:
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