Cómo mostrar el cuadro de diálogo usando el script de shell con ejemplos
Este tutorial le dará un par de ejemplos sobre cómo usar utilidades como zenity y whiptail en su script de shell Bash para proporcionar un mensaje / cuadro de diálogo. Con estas utilidades, su script podrá informar al usuario sobre el estado actual de ejecución o brindarle la capacidad de interactuar. La diferencia entre estas dos utilidades es la forma en que muestran el cuadro de mensaje o diálogo. Zenity usa el kit de herramientas GTK para crear interfaces gráficas de usuario, mientras que whiptail crea cuadros de mensajes dentro de la ventana de la terminal.
Herramienta Zenity
Para instalar zenity en Ubuntu, ejecute:
sudo apt-get install zenity
Dado que los comandos para crear cuadros de mensaje o diálogos con zenity se explican por sí mismos, le proporcionaremos un par de ejemplos.
Crear cuadro de información
zenity –info –title «Cuadro de información» –text «Esto debería ser información» –width = 300 –height = 200
Crear diálogo Sí / No
zenity --question --text "Do you want this?" --ok-label "Yeah" --cancel-label="Nope"
Creando cuadro de entrada y almacenando valor en variable
a=$(zenity --entry --title "Entry box" --text "Please enter the value" --width=300 --height=200) echo $a
Después de ingresarlo, el valor se almacenará en $ una variable.
Aquí está el ejemplo de trabajo que toma el nombre, apellido y edad del usuario y lo muestra.
#!/bin/bash # # This script will ask for couple of parameters # and then continue to work depending on entered values # # Giving the option to user zenity --question --text "Do you want to continue?" # Checking if user wants to proceed [ $? -eq 0 ] || exit 1 # Letting user input some values FIRSTNAME=$(zenity --entry --title "Entry box" --text "Please, enter your first name." --width=300 --height=150) LASTNAME=$(zenity --entry --title "Entry box" --text "Please, enter your last name." --width=300 --height=150) AGE=$(zenity --entry --title "Entry box" --text "Please, enter your age." --width=300 --height=150) # Displaying entered values in information box zenity --info --title "Information" --text "You are ${FIRSTNAME} ${LASTNAME} and you are ${AGE}(s) old." --width=300 --height=100
Aquí están las capturas de pantalla del script anterior.
No olvides consultar algunos de los útiles opciones zenity eso podría ayudarte.
Herramienta Whiptail
Para instalar whiptail en Ubuntu ejecutar
sudo apt-get install whiptail
Los comandos para crear un cuadro de mensaje / diálogo con cola de látigo también se explican por sí mismos, por lo que le proporcionaremos solo un par de ejemplos básicos.
Creando cuadro de mensaje
whiptail --msgbox "This is a message" 10 40
Crear diálogo Sí / No
whiptail --yes-button "Yeah" --no-button "Nope" --title "Choose the answer" --yesno "Will you choose yes?" 10 30
Creando cuadro de entrada con valor predeterminado
whiptail --inputbox "Enter your number please." 10 30 "10"
Una cosa a tener en cuenta al intentar usar el valor ingresado es que whiptail usa stdout para mostrar el diálogo y stderr para la salida del valor. De esa manera, si usa var = $ (…) no verá ningún cuadro de diálogo y no obtendrá el valor ingresado. La solución es cambiar stdout y stderr. Para hacer eso solo agrega 3> & 1 1> & 2 2> & 3 al final del comando de cola de látigo. Lo mismo sucedería con cualquier comando whiptail que desee usar para obtener algún valor ingresado.
Crear diálogo de menú
whiptail --menu "This is a menu. Choose an option:" 20 50 10 1 "first" 2 "second" 3 "third"
Aquí hay un script de shell que le pide al usuario que ingrese una ruta a una carpeta y luego muestra su tamaño.
#!/bin/bash # # # Since whiptail has to use stdout to display dialog, entered value will # be stored in stderr. To switch them and get the value to stdout you must # use 3>&1 1>&2 2>&3 FOLDER_PATH=$(whiptail --title "Get the size of folder" --inputbox "Enter folder path:" 10 30 "/home" 3>&1 1>&2 2>&3) if [ -d $FOLDER_PATH ] then size=$(du -hs "$FOLDER_PATH" | awk '{print $1}') whiptail --title "Information" --msgbox "Size of ${FOLDER_PATH} is ${size}" 10 40 elif [ -f $FOLDER_PATH ] then whiptail --title "Warning!!!" --msgbox "The path you entered is a path to a file not a folder!" 10 40 else whiptail --title "Error!!!" --msgbox "Path you entered is not recognized. Please try again" 10 40 fi
Aquí están las capturas de pantalla del ejemplo anterior:
Si está trabajando en la terminal, páginas de manual están siempre disponibles.
Conclusión
La elección de la herramienta adecuada para mostrar los cuadros de diálogo dependerá de si espera que su secuencia de comandos se ejecute en una máquina de escritorio o en una máquina servidor. Los usuarios de máquinas de escritorio utilizan principalmente el entorno de ventana y posiblemente podrán ejecutar el script e interactuar con las ventanas que aparecen. Sin embargo, si espera que el usuario sea alguien en la máquina del servidor, es posible que desee ir a lo seguro y usar whiptail o cualquier otra utilidad que muestre cuadros de diálogo en una ventana de terminal simple.