Comment afficher une boîte de message GUI à partir d'un script bash sous linux?

j'écris quelques petits scripts bash sous Linux Ubuntu. Je veux être capable de les exécuter depuis L'interface graphique sans avoir besoin d'une fenêtre de terminal pour entrer n'importe quelle entrée ou afficher n'importe quelle sortie.

jusqu'à présent, la seule entrée requise est un mot de passe pour sudo et gksudo poignées fines. Mais je n'ai pas encore trouvé un moyen facile de montrer une boîte de message. Y a-t-il une commande "gkmessage" disponible? Je préférerais quelque chose de présent dans une installation Ubuntu par défaut, mais je m'en fiche installer un nouveau paquet si nécessaire.

124

12 réponses

je crois Zenity faire ce que vous souhaitez. Il est spécialement conçu pour afficher les dialogues GTK de la ligne de commande, et il est disponible comme un paquet Ubuntu .

123
répondu Derek Park 2008-08-10 06:40:47

Si vous utilisez Ubuntu de nombreuses distributions notify-send commande va lancer une de ces belles périssables notifications dans le coin supérieur droit. Comme ceci:

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

B. E. A. utiful!

121
répondu chmac 2013-09-12 08:14:57

tout le monde mentionne zenity, il semble y en avoir beaucoup d'autres. Une liste confuse mais intéressante est à http://alternativeto.net/software/zenity/

tout d'abord, un exemple de zenity comportant le markup de formatage de texte, le titre de la fenêtre, l'étiquette de bouton.

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"

message

xmessage est très vieux donc il est stable et probablement disponible en toutes les distributions qui utilisent X (puisqu'il est distribué avec X). Il est personnalisable à travers les ressources X, pour ceux qui utilisent Linux ou Unix depuis assez longtemps pour savoir ce que cela signifie ( .Xdefaults , n'importe qui ?).

xmessage -buttons Ok:0,"Not sure":1,Cancel:2 -default Ok -nearmouse "Is xmessage enough for the job ?" -timeout 10

kdialog

(non testé)

Dans un PPA

YAD: Zenity On Steroids [Display Graphical Dialogs From Shell Scripts] ~ Web Upd8: Ubuntu / Linux blog . Ne semble pas auto-dimensionner les dialogues.

echo My text | yad \
--text-info \
--width=400 \
--height=200

un plus grand exemple

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"

autres ne figurant pas dans les référentiels Ubuntu

  • shellgui
  • xdialog
  • gtkdialog

hors-sujet (pour terminal)

whiptail --msgbox "my text" 10 20
dialog --msgbox "my text" 10 20

N'hésitez pas à éditer.

61
répondu Stéphane Gourichon 2014-02-28 11:39:09

l'application zenity semble être ce que vous recherchez.

À partir de zenity , vous pouvez spécifier une variable et la sortie de zenity --entry sauvés. Il ressemble à quelque chose comme ceci:

my_variable=$(zenity --entry)

si vous regardez la valeur dans my_variable maintenant, ce sera ce qui a été tapé dans la fenêtre pop up de zenity.

Si vous voulez donner une sorte d'invite à ce que l'utilisateur (ou vous) doit entrer dans la boîte de dialogue, ajouter --text commutateur avec l'étiquette que vous voulez. Il ressemble à quelque chose comme ceci:

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

Zenity a beaucoup d'autres belles options qui sont pour des tâches spécifiques, donc vous pourriez vouloir vérifier ceux-ci aussi bien avec zenity --help . Un exemple est l'option -- calendar qui sélectionnez une date à partir d'un calendrier graphique.

my_date=$(zenity --calendar)

qui donne une date joliment formatée basée sur ce sur quoi l'Utilisateur a cliqué:

echo ${my_date}

donne:

08/05/2009

il y a aussi des options pour les sélecteurs de curseur, les erreurs, les listes et ainsi de suite.

Espérons que cette aide.

44
répondu Jim 2009-08-06 14:40:55

j'ai trouvé la commande xmessage , ce qui est assez bien.

15
répondu Blorgbeard 2018-07-10 03:24:18

voici un petit script Tcl qui fera ce que vous voulez. L'interpréteur de souhaits doit être installé par défaut sur Ubuntu.

#!/usr/bin/wish
pack [label .msg -text [lindex $argv 0]]
pack [entry .ent]
bind .ent <KeyPress-Return> { puts [.ent get]; destroy . }
focus .ent

appelez ça comme ça:

myanswer=`gui-prompt "type your answer and press enter"`
7
répondu Mark Harrison 2008-08-10 04:34:36

alert et notify-send semblent être la même chose. J'utilise notify-send pour les messages non-entrée car il ne vole pas la mise au point et je ne peux pas trouver un moyen d'arrêter zenity, etc. en faisant cela.

p.ex.

# 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
répondu Dave Thebuskeruk 2017-02-09 00:17:09

il y a aussi dialog et la version KDE kdialog . dialog est utilisé par slackware, il pourrait ne pas être immédiatement disponible sur d'autres distributions.

5
répondu Steve Baker 2017-03-07 23:13:49

si rien d'autre n'est présent. vous pouvez lancer un xterm et l'écho, comme ceci:

 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
répondu user6795571 2017-11-09 03:44:31

pourquoi pas alert D'Ubuntu . Il peut être utilisé après n'importe quelle opération pour l'alerter terminé et même montrer l'icône de la Croix-Rouge si l'opératon a été finnished avec des erreurs

ls -la; alert
2
répondu mulya 2016-03-10 15:30:00

Zenity est vraiment exactement l'outil que je pense que vous êtes la recherche pour.

ou

zenity --help
2
répondu Lnux 2017-02-13 05:24:47

Kdialog et dialog sont tous les deux bons, mais je recommande Zenity. Rapide, facile, et bien mieux chercher le xmessage ou le dialogue.

0
répondu Jarek 2008-09-17 02:13:53