183 votes

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

J'écris quelques petits scripts bash sous Ubuntu linux. Je veux pouvoir les exécuter à partir de l'interface graphique sans avoir besoin d'une fenêtre de terminal pour entrer des données ou afficher des résultats.

Jusqu'à présent, la seule entrée requise est un mot de passe pour sudo - et gksudo le gère bien. Mais je n'ai pas encore trouvé un moyen facile d'afficher une boîte de message. Y a-t-il une sorte de commande 'gkmessage' disponible ? Je préférerais quelque chose de présent dans l'installation par défaut d'Ubuntu, mais cela ne me dérange pas d'installer un nouveau paquet si nécessaire.

0 votes

186voto

chmac Points 797

Si vous utilisez Ubuntu Dans de nombreuses distributions, la notify-send La commande enverra une de ces belles notifications périssables dans le coin supérieur droit. Comme ça :

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

B.e.a.utiful !

2 votes

Cela fonctionne également avec Fedora. Je suis presque certain que n'importe quelle distribution Linux peut le faire.

5 votes

Ne fonctionne pas sur Raspbian GNU/Linux 7. Y a-t-il un paquet qui doit être installé ?

2 votes

Dans les dépôts debian : apt-cache search notify-osd @carlverbiest

165voto

Derek Park Points 25025

Je crois Zenity fera ce que vous voulez. Il est spécialement conçu pour afficher les dialogues GTK à partir de la ligne de commande, et il est disponible sous la forme d'un fichier Paquet Ubuntu .

7 votes

zenity --help n'est pas si utile. Pour que cela soit utile, vous devez vous assurer que vous définissez --text=My text here pour qu'il affiche quelque chose...

14 votes

Par exemple zenity --info --text="Calculation complete"

5 votes

@Stephen, pour une raison étrange, la commande correcte est zenity --help-all .

124voto

Tout le monde mentionne zenity, mais il semble y en avoir beaucoup d'autres. Une liste hétéroclite mais intéressante se trouve à http://alternativeto.net/software/zenity/

Tout d'abord, un exemple de zenity comportant des balises de mise en forme du texte, un titre de fenêtre, une é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"

xmessage

xmessage est très ancien donc il est stable et probablement disponible dans toutes les distributions qui utilisent X (puisqu'il est distribué avec X). Il est personnalisable grâce aux ressources de X, pour ceux qui utilisent Linux ou Unix depuis assez longtemps pour savoir ce que cela signifie ( .Xdefaults quelqu'un ?).

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 [Afficher des dialogues graphiques à partir de scripts Shell] ~ Web Upd8 : Ubuntu / Linux blog . Il ne semble pas que la taille des boîtes de dialogue soit automatique.

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

Un exemple plus grand

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 pas dans les dépôts standards d'Ubuntu

  • shellgui
  • xdialog
  • gtkdialog

Hors sujet (pour le terminal)

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

N'hésitez pas à modifier.

0 votes

@ThorSummoner merci pour le tuyau. Pour le lecteur intéressé, la différence est la suivante whiptail --infobox (qui ne fonctionne pas correctement sur les terminaux qui prennent en charge l'écran alternatif) revient sans attendre l'entrée de l'utilisateur, alors que whiptail --msgbox (qui fonctionne) attend la confirmation de l'utilisateur avant de sortir.

0 votes

Je me souviens avoir été insatisfait de msgbox, pour mes besoins de l'époque, je pense que j'avais besoin que la sortie soit visible dans un journal ou quelque chose comme ça ;

51voto

Jim Points 678

Le site zenity semble correspondre à ce que vous recherchez.

Prendre l'avis de zenity vous pouvez spécifier une variable et avoir la sortie de zenity --entry enregistré. Cela ressemble à quelque chose comme ça :

my_variable=$(zenity --entry)

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

Si vous souhaitez donner une sorte d'indication sur ce que l'utilisateur (ou vous-même) devez saisir dans la boîte de dialogue, ajoutez l'option --texte avec l'étiquette que vous voulez. Cela ressemble à quelque chose comme ça :

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

Zenity a beaucoup d'autres options intéressantes pour des tâches spécifiques, vous pouvez donc les consulter également avec zenity --help . Un exemple est le --calendrier qui vous permet de sélectionner une date dans un calendrier graphique.

my_date=$(zenity --calendar)

Ce qui donne une date joliment formatée en fonction de ce sur quoi l'utilisateur a cliqué :

echo ${my_date}

donne :

08/05/2009

Il existe également des options pour les sélecteurs à curseur, les erreurs, les listes, etc.

J'espère que cela vous aidera.

0 votes

Je peux voir zentity a l'air cool. Cependant, il ne fait pas partie d'Ubuntu 12.04, alors j'ai opté pour gxmessage à la place.

22voto

Blorgbeard Points 38991

J'ai trouvé le xmessage ce qui est déjà pas mal.

4 votes

C'est le grand-père de tous.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X