¿Cómo mostrar un cuadro de mensaje GUI desde un script bash en linux?


Estoy escribiendo unos cuantos scripts bash bajo 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 aún no he encontrado una manera fácil de mostrar un cuadro de mensaje. ¿Hay algún tipo de comando' gkmessage ' disponible? Preferiría algo presente en una instalación predeterminada de Ubuntu, pero no me importa instalar un nuevo paquete si necesario.

12 answers

Creo que Zenity hará lo que quieras. Está diseñado específicamente para mostrar diálogos de GTK desde la línea de comandos, y está disponible como un paquete de Ubuntu .

 123
Author: Derek Park,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2008-08-10 06:40:47

Si estás usando Ubuntu muchas distribuciones el comando notify-send lanzará una de esas notificaciones perecederas en la esquina superior derecha. Así:

notify-send "My name is bash and I rock da house"

B. e. a. utiful!

 121
Author: chmac,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-09-12 08:14:57

Todo el mundo menciona zenity, parece que hay muchos otros. Una lista confusa 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 disponible en todas las distribuciones que usan X (ya que está distribuido con X). Es personalizable a través de X recursos, para aquellos que han estado usando Linux o Unix durante el tiempo suficiente para saber lo que significa (.Xdefaults, ¿alguien?).

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 On Steroids [Mostrar Diálogos Gráficos De Scripts De Shell] ~ Web Upd8: Ubuntu / Linux blog . No parece que los 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 están en el estándar Ubuntu repositorios

  • 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.

 61
Author: Stéphane Gourichon,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-02-28 11:39:09

La aplicación zenity parece ser lo que estás buscando.

Para tomar la entrada de zenity, puede especificar una variable y tener la salida de zenity entry entry guardada en ella. Se ve algo como esto:

my_variable=$(zenity --entry)

Si nos fijamos en el valor en mi_variable ahora, será lo que se escribió en el cuadro de diálogo de entrada emergente zenity.

Si desea dar algún tipo de aviso en cuanto a lo que el usuario (o usted) debe introducir en el diálogo, agregue el switch text cambia con la etiqueta que quieras. Se ve algo como esto:

my_variable=$(zenity --entry --text="What's my variable:")

Zenity tiene muchas otras buenas opciones que son para tareas específicas, por lo que es posible que desee comprobarlas también con zenity help help. Un ejemplo es la opción calendar calendar que le permite seleccionar una fecha de un calendario gráfico.

my_date=$(zenity --calendar)

Que da una fecha 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.

 44
Author: Jim,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-08-06 14:40:55

Encontré el comando xmessage, que es bastante bueno.

 15
Author: Blorgbeard,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-07-10 03:24:18

Aquí hay un pequeño script Tcl que hará lo que quieras. El intérprete Wish debería estar instalado por defecto 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"`
 7
Author: Mark Harrison,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2008-08-10 04:34:36

alert y notify-send parecen ser la misma cosa. Utilizo notify-send para mensajes que no son de entrada, ya que no roba el enfoque y no puedo encontrar una manera de detener zenity, etc. de hacer esto.

E. g.

# 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"
 5
Author: Dave Thebuskeruk,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-02-09 00:17:09

También existe dialog y la versión de KDE kdialog. dialog es usado por slackware, por lo que podría no estar inmediatamente disponible en otras distribuciones.

 5
Author: Steve Baker,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-03-07 23:13:49

Si no hay nada más presente. puedes lanzar un xterm y hacer eco 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);'
 3
Author: user6795571,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-11-09 03:44:31

Qué tal la alerta de Ubuntu . Se puede utilizar después de cualquier operación para alertar que terminó e incluso mostrar el icono de la cruz roja si operaton fue finnished con errores

ls -la; alert
 2
Author: mulya,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-03-10 15:30:00

Zenity es realmente la herramienta exacta que creo que estás buscando.

O

zenity --help
 2
Author: Lnux,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-02-13 05:24:47

Kdialog y dialog son buenos, pero yo recomendaría Zenity. Rápido, fácil y mucho mejor el xmessage o diálogo.

 0
Author: Jarek,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2008-09-17 02:13:53