programas - ¿Cómo mostrar un cuadro de mensaje GUI desde un script bash en Linux?
scripts bash ejemplos (12)
Estoy escribiendo algunos pequeños scripts bash en Ubuntu Linux. Quiero poder ejecutarlos desde la GUI sin necesidad de una ventana de terminal para ingresar cualquier entrada o ver cualquier salida.
Hasta ahora, la única entrada requerida es una contraseña para sudo, y gksudo maneja eso bien. Pero no he encontrado una manera fácil de mostrar un cuadro de mensaje todavía. ¿Hay algún tipo de comando ''gkmessage'' disponible? Prefiero algo presente en una instalación predeterminada de Ubuntu, pero no me importa instalar un paquete nuevo si es necesario.
¿Qué tal la alerta de Ubuntu? Puede usarse después de cualquier operación para alertarlo e incluso mostrar el ícono de la cruz roja si la operación fue finalizada con errores.
ls -la; alert
Aquí hay un pequeño script Tcl que hará lo que quieras. El intérprete de Wish debería instalarse de manera predeterminada en Ubuntu.
#!/usr/bin/wish
pack [label .msg -text [lindex $argv 0]]
pack [entry .ent]
bind .ent <KeyPress-Return> { puts [.ent get]; destroy . }
focus .ent
Llámalo así:
myanswer=`gui-prompt "type your answer and press enter"`
Creo que Zenity hará lo que quieras. Está específicamente diseñado para mostrar diálogos GTK desde la línea de comandos, y está disponible como un paquete de Ubuntu .
Encontré el comando xmessage , que es bastante bueno.
Kdialog y el diálogo son buenos, pero recomendaría Zenity. Rápido, fácil y mucho mejor buscando el mensaje de texto o xmessage.
La aplicación zenity parece ser lo que estás buscando.
Para tomar entrada de zenity , puede especificar una variable y hacer que se guarde la salida de zenity --entry . Se ve algo como esto:
my_variable=$(zenity --entry)
Si miras el valor en my_variable ahora, será lo que fue escrito en el cuadro de diálogo emergente de zenity pop-up.
Si desea dar algún tipo de aviso sobre qué debe ingresar el usuario (o usted) en el cuadro de diálogo, agregue el modificador --text con la etiqueta que desee. Se ve algo como esto:
my_variable=$(zenity --entry --text="What''s my variable:")
Zenity tiene muchas otras opciones agradables que son para tareas específicas, por lo que es posible que desee comprobarlas también con zenity --help . Un ejemplo es la opción --calendar que le permite seleccionar una fecha de un calendario gráfico.
my_date=$(zenity --calendar)
Lo que le da una fecha muy bien formateada basada en lo que el usuario hizo clic en:
echo ${my_date}
da:
08/05/2009
También hay opciones para selectores deslizantes, errores, listas, etc.
Espero que esto ayude.
Si está utilizando muchas distros de Ubuntu, el comando notify-send
arrojará una de esas notificaciones perecederas agradables en la esquina superior derecha. Al igual que:
notify-send "My name is bash and I rock da house"
¡Hermosa!
También hay dialog
y la versión de KDE kdialog
. dialog
es utilizado por slackware, por lo que podría no estar inmediatamente disponible en otras distribuciones.
Todo el mundo menciona el zenity, parece que hay muchos otros. Una lista mixta pero interesante está en http://alternativeto.net/software/zenity/
Primero, un ejemplo de zenity con marcado de formato de texto, título de ventana, etiqueta de botón.
zenity /
--info /
--text="<span size=/"xx-large/">Time is $(date +%Hh%M).</span>/n/nGet your <b>coffee</b>." /
--title="Coffee time" /
--ok-label="Sip"
gxmessage
gxmessage "my text"
xmessage
xmessage
es muy antiguo, por lo que es estable y probablemente esté disponible en todas las distribuciones que usen X (ya que se distribuye con X). Se puede personalizar a través de recursos X, para aquellos que han estado usando Linux o Unix durante el tiempo suficiente para saber lo que significa ( .Xdefaults
, anyone?).
xmessage -buttons Ok:0,"Not sure":1,Cancel:2 -default Ok -nearmouse "Is xmessage enough for the job ?" -timeout 10
kdialog
(no probado)
En un PPA
YAD: Zenity en esteroides [Mostrar cuadros de diálogo gráficos desde scripts de shell] ~ Web Upd8: blog de Ubuntu / Linux . No parece diálogos de tamaño automático.
echo My text | yad /
--text-info /
--width=400 /
--height=200
Un ejemplo más grande
yad /
--title="Desktop entry editor" /
--text="Simple desktop entry editor" /
--form /
--field="Type:CB" /
--field="Name" /
--field="Generic name" /
--field="Comment" /
--field="Command:FL" /
--field="Icon" /
--field="In terminal:CHK" /
--field="Startup notify:CHK" "Application" "Name" "Generic name" "This is the comment" "/usr/bin/yad" "yad" FALSE TRUE /
--button="WebUpd8:2" /
--button="gtk-ok:0" /
--button="gtk-cancel:1"
Otros no en repositorios estándar de Ubuntu
- Shellgui
- xdialog
- gtkdialog
Fuera de tema (para terminal)
whiptail --msgbox "my text" 10 20
dialog --msgbox "my text" 10 20
Siéntase libre de editar.
si nada más está presente. puedes ejecutar xterm y echo en él, así:
xterm -e bash -c ''echo "this is the message";echo;echo -n "press enter to continue "; stty sane -echo;answer=$( while ! head -c 1;do true ;done);''
alert
y notify-send
parecen ser lo mismo. Utilizo notify-send
para mensajes que no son de entrada ya que no roban el foco y no puedo encontrar una manera de detener el zenity, etc. de hacer esto.
p.ej
# This will display message and then disappear after a delay:
notify-send "job complete"
# This will display message and stay on-screen until clicked:
notify-send -u critical "job complete"