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

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

  1. Hola muy buenas , mira estoy intentando lo siguiente, hacer un Menu , elegir una opcion y que se ejecuten comandos , mostrandome los resultados con zenity

    #!/bin/bash
    Titulo=”Ejemplo De Seleccion”
    Pregunta=”Selecciona una opcion:”
    Opciones=(“A” “B” “C”)

    echo “$Titulo”
    PS3=”$Pregunta ”

    while opt=”$(zenity –title=”$Titulo” –text=”$Pregunta” –list –column=”Opciones” “${Opciones[@]}”)”; do

    case $opt in
    0)
    echo “Has elegido $opt, Opcion 1″
    zenity –info –text=”Has elegido $opt, Opcion 1”
    ;;
    1)
    echo “Has elegido $opt, Opcion 2″
    zenity –info –text=”Has elegido $opt, Opcion 2”
    ;;

    2)
    echo “Has elegido $opt, Opcion 3″
    zenity –info –text=”Has elegido $opt, Opcion 3″
    ;;
    -1) zenity –error –text=”Opcion Incorrecta , Intenta con otra.” ;;
    esac

    done

    Ahora la cuestion es que eligo A B C pero no me muestra nada luego con el Zenity –info –text=”Texto”;; . parece que no hace nada , puedes decirme que esta mal en el codigo , por favor ???

Deja un comentario