user interface - opciones - ¿Cómo hacer una GUI para scripts bash?
menú en shell script de linux (9)
Quiero hacer algunos cuadros de diálogo gráficos para mi script, pero no sé cómo. Escuché algo sobre GTK-Server o algo así. Si alguien sabe cómo vincular Bash con tcl / tk, también estoy satisfecho.
No publique algo como "cambiar a C ++" porque mi proyecto debe ser un script en Bash; No hay otras opciones.
¿Algunas ideas?
EDITAR: Gracias por las respuestas, pero no quiero "gráficos" como en colores en la consola, pero ventanas gráficas que puedo mover, minimizar, etc. Voy a probar xmessage
, pero no creo que sea lo que estoy buscando para.
EDIT 2: No quiero hacer un diálogo simple como sí / no, sino una interfaz como barras de progreso y botones, algo así como un juego.
Al parecer, alguien ha escrito una interfaz bash para GTK +. No estoy seguro si puede hacerlo funcionar fácilmente, pero podría valer la pena intentarlo. Lo puedes encontrar aquí:
Antes de usar realmente los diálogos de GUI, considere usar las instrucciones de la consola. Muy a menudo puede salirse con la simple "y / n?" indicaciones, que en bash se logra mediante el comando de read
...
read -p "Do something? ";
if [ $REPLY == "y" ]; then
echo yay;
fi
Si el prompt de la consola simplemente no funciona, Zenity es realmente fácil de usar , por ejemplo:
zenity --error --text="Testing..."
zenity --question --text="Continue?"
Esto solo funciona en Linux / Gnome (o más bien, solo se instalará por defecto en tales sistemas). El método de read
funcionará en casi cualquier plataforma (incluidas las máquinas sin cabeza, o vía SSH)
Si necesita algo más complejo que lo que lee o proporciona Zenity, "cambiar a C ++" es realmente el mejor método (aunque recomendaría Python / Ruby sobre C ++ para tales tareas de reemplazo de scripts de shell)
Quiero hacer una 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. La variable "SALUD" es 34, por lo que la barra de progreso debe estar llena 34/100
Como 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 que no se ajuste la 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 cuadro de 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 cosa de juego como una secuencia de comandos "adecuada" en Python / Ruby / Perl / C ++ / etc, ya que parece que está empujando los límites de lo que es un caparazón -script puede hacer ...
Bueno, si puede usar Tcl / Tk en su entorno, probablemente debería escribir un script TCL y usarlo. También puedes mirar el wish .
Por favor, eche un vistazo a mi biblioteca: http://sites.google.com/site/easybashgui
Se pretende manejar, con los mismos comandos establecidos, indistintamente las cuatro herramientas grandes "kdialog", "Xdialog", "cdialog" y "zenity", dependiendo de si X se está ejecutando o no, si DE es KDE o Gnome u otro. Hay 15 funciones diferentes (entre ellas hay dos llamadas "progreso" y "ajuste") ...
Adiós :-)
Puedes 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 )
Si desea escribir una interfaz gráfica de usuario en bash, zenity es el camino a seguir. Esto es lo que puedes hacer con eso:
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 útiles. 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.
Si tiene instalado Qt / KDE, puede usar kdialog , que abre una ventana de diálogo de Qt. Puede especificar fácilmente que se muestre un cuadro de diálogo Sí / No, Aceptar / Cancelar, entrada de texto simple, ingreso de contraseña, etc. A continuación, tendrá acceso a los valores de retorno de estos cuadros de diálogo en el shell.
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 están implementados (aunque no todos se compilan necesariamente en el cuadro de diálogo) "