22 febrero 2007

Zenity: cuadros de diálogo en tus shell scripts

Todo el que usa Linux tarde o temprano acaba haciéndose algún shell script. Desde pequeños scripts que automatizan tareas engorrosas, hasta auténticos monstruos de más de quinientas líneas, los scripts son realmente necesarios en algún momento u otro. Yo los uso a diario: para hacer copias de seguridad periódicas, para cambiar la configuración de la wi-fi, para sincronizar dispositivos... Incluso he publicado alguno de ellos ya aquí.

Zenity es una utilidad que hace realmente fácil el mostrar cuadros de diálogo con GTK+ en tus shell scripts. Su uso es realmente sencillo y el resultado muy llamativo.

Zenity retorna al script distintos valores dependiendo de la acción del usuario sobre el cuadro de diálogo, de forma que puedas usarlos para lanzar condicionales o para capturar variables (VARIABLE=`zenity --entry`, por ejemplo). La caña, vamos. Un sencillo ejemplo:

if (`zenity --question`); then zenity --info; else zenity --error; fi

El resultado:



zenity --question devuelve 1 (o, lo que es lo mismo, true) si el usuario pulsa "Aceptar", y 0 (o false) si pulsa "Cancelar".



Las posibilidades son muchas y muy variadas, y su uso no puede ser más sencillo. man zenity para ver todas las posibilidades que ofrece ;)

6 comentarios:

Anónimo dijo...

Viendo el post, me surgen dos dudas:

Todas tus maquinas tienen nombres de niños que parecen abuelos? :P

Y... Es sobre scripts que no tengo ni idea... Conoces el programa Oneko? Veras, el caso es que me gustaria anidar varios de ellos (cada ventana/gato persigue a la anterior si lo configuras asi) pero sin tener que abrir una consola por cada uno.

He intentado meter todas las ordenes en un fichero de texto y darle permisos, pero asi no funciona (solo sale el primero).

Supongo que luego podria añadirsele un lanzador con un icono, para no tener casi ni que abrir la terminal.

Se te ocurre algo?

Asias

kirazuel dijo...

A ver si podemos aclararlas :)

En cuanto a la primera, no. No todas, sólo tres (adivina...). Otras se llaman kaneda, tetsuo, kaori y yama. Joder, incluso una se llama ashitaka (sip, ya sé que esta se sale del tiesto, pero la bauticé durante mi época Miyazaki xD). Si alguna vez me compro un MacBook se llamará Nausicaa xDDD.

En cuanto al tema del 猫 xD no sé cómo has echo el script, pero sospecho que el problema está en que es algo del tipo:

#!/bin/bash
oneko -sakura
oneko -tomoyo
oneko -tora


etcétera. Ten en cuenta que mientras no acabe de ejecutar el primer comando no pasará a ejecutar el segundo, es decir, mientras el primer oneko esté ejecutándose no ejecutará los demás. Lo que tienes que hacer es ejecutarlos en segundo plano:

#!/bin/bash
oneko -sakura &
oneko -tomoyo &
oneko -tora &


o los que quieras poner.

Anónimo dijo...

Muchas gracias!!

Asi si que funciona... aisss por un andpersand de estos...

Bien, veamos si ahora puedo crear un lanzador... y quien sabe a lo mejor podria añadir un cuadro de dialogo de esos para cerrar el programa.

Que por intentarlo no quede :)

kirazuel dijo...

Algo "rápido y sucio":

#!/bin/bash
if (`zenity --question --text="Iniciar o parar?"`)
then
CARACTER=`zenity --entry --text="Elige el personaje"`
oneko -$CARACTER &
else
killall oneko
fi


"Aceptar" lo ejecuta (después abre un cuadro de diálogo para elegir el personaje), "Cancelar" detiene los que haya en ejecución :)

Anónimo dijo...

Me acabas de resolver una buena duda que tenia. Estoy tambien liado con un cronometro para que se automate.

"bienvenido al maravilloso mundo del scripting"

... es un decir ¬_¬U


Mañana si va bien lo publico :)

Anónimo dijo...

Bueno, pues lo he publicado aqui:

http://www.kusanagiweb.com/forum/viewtopic.php?t=636

Todavia no esta maduro, ni he tenido tiempo de probar tusu sugerencias, pero bueno... es el primero :)