Zenity (I): Interfaz gráfica en bash – Ejemplo de diálogo de selección de fichero

Zenity nos permite añadir diálogos gráficos a nuestros scripts bash. Tienen diversos tipos de diálogos: mensajes de mensajes (de error, información o alerta), diálogos para selección de fichero, para entrada de texto, etc.

Viene instalada por defecto en algunas distribuciones de Linux (imagino que será en las basadas en Gnome), por ahora lo he comprobado en Ubuntu 12.04 y Linux Mint Mate.

Aquí os dejo un ejemplo del uso de diálogos de selección. Este script permite al usuario elegir una serie de ficheros que serán añadidos a un fichero comprimido:

#!/bin/bash
 
# Pedimos al usuario que seleccione los archivos a comprimir
archivos=$(zenity --file-selection --multiple --filename=/home/gorka --title="Selecciona archivos para comprimir")
 
case $? in
         0)
		# Esta opción se ejecuta cuando se han seleccionado ficheros                
		zenity --info --text "Archivo(s) $archivos seleccionado(s)"
 
		;;
         1)
                zenity --error --text "No has seleccionado ningún archivo"
		exit
		;;
        -1)
                echo "Ha ocurrido un error inesperado."
		exit				
;;
esac
 
# Si se han seleccionado varios archivos tenemos que reemplazar | por un espacio
archivos=${archivos//|/ }
 
# Ahora pedimos al usuario que indique el nombre del fichero comprimido
nombre_fichero=$(zenity --file-selection --save --title="Nombre del fichero comprimido")
 
case $? in
         0)
                # Comprimimos los archivos
		tar -cf $nombre_fichero.tar $archivos
		gzip $nombre_fichero.tar
 
		;;
         1)
                zenity --error --text "No has seleccionado ningún directorio"
		exit
		;;
        -1)
                echo "Ha ocurrido un error inesperado."
		exit				
;;
esac

Notas

  • La opción –multiple permite al usuario seleccionar varios archivos. Si no la ponemos el usuario sólo podrá escoger un único fichero.
  • La opción –save se usa para poner el diálogo en “modo grabar”. Esto permitirá crear el fichero si no existe.
  • Si el usuario selecciona varios ficheros en el primer diálogo éste nos va a devolver una cadena con la lista de archivos seleccionados separados por un ‘|’. Debemos cambiar este símbolo por espacios. Esto lo hacemos con archivos=${archivos//|/ }

Probar el script

Para probar este ejemplo guardar el código anterior en un fichero llamado, por ejemplo, prueba_zenity.

Después tenemos que convertir el script en ejecutable. Para eso abre una consola y teclea:

$ chmod +x prueba_zenity

y ya podemos usarlo:

$ ./prueba_zenity