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.
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 .
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!
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.
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.
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"`
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"
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.
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);'
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
Kdialog et dialog sont tous les deux bons, mais je recommande Zenity. Rapide, facile, et bien mieux chercher le xmessage ou le dialogue.