Hoe om 'n GUI boodskap boks van 'n bash script op linux wys?
Vra
Ek skryf 'n paar klein bash skrifte onder Ubuntu Linux. Ek wil in staat wees om hulle uit te voer van die GUI sonder 'n terminaal venster na enige insette te betree of te sien enige uitset.
Tot dusver het die enigste insette wat nodig is is 'n wagwoord vir sudo - en gksudo hanteer wat fyn. Maar ek het nie gevind 'n maklike manier om 'n boodskap boks nog wys. Is daar 'n soort van opdrag 'gkmessage' beskikbaar? Ek wil iets teenwoordig verkies in 'n standaard Ubuntu te installeer, maar ek gee nie om nie die installering van 'n nuwe pakket, indien nodig.
Oplossing
Ek glo Zenity sal doen wat jy wil. Dit is spesifiek ontwerp vir die vertoon van GTK vensters van die command line, en dit is beskikbaar as 'n Ubuntu pakket .
Ander wenke
As jy ' Ubuntu baie Distros die notify-send
opdrag sal gooi een van daardie lekker bederfbare kennisgewings in die regter boonste hoek. Soos so:
notify-send "My name is bash and I rock da house"
B.e.a.utiful!
Almal noem zenity, daar blyk te baie ander wees. A deurmekaar, maar interessante lys is by http://alternativeto.net/software/zenity/
In die eerste plek 'n voorbeeld van zenity met teks formatering opmaak, venster titel, knoppie etiket.
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
is baie oud so dit is stabiel en waarskynlik beskikbaar in alle uitkerings wat X gebruik (aangesien dit versprei met X). Dit is pas deur X hulpbronne, vir diegene wat reeds die gebruik van Linux of Unix lank genoeg om te weet wat dit beteken (.Xdefaults
, enigiemand?).
xmessage -buttons Ok:0,"Not sure":1,Cancel:2 -default Ok -nearmouse "Is xmessage enough for the job ?" -timeout 10
KDialog
(nie getoets)
In 'n PPA
Yad: Zenity op steroïede [Display Grafiese Dialogs Van tolk skripte] ~ Web Upd8: Ubuntu / Linux blog . Dit lyk nie of die motor-grootte vensters.
echo My text | yad \
--text-info \
--width=400 \
--height=200
'n groter voorbeeld
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"
Ander nie in Ubuntu standaard repositories
- shellgui
- xdialog
- gtkdialog
Off-onderwerp (vir terminale)
whiptail --msgbox "my text" 10 20
dialog --msgbox "my text" 10 20
Voel vry om te verander.
zenity aansoek blyk te wees wat jy is op soek na.
Om insette te neem van zenity , kan jy 'n veranderlike spesifiseer en moet die opbrengs van zenity --entry gered te word. Dit lyk iets soos hierdie:
my_variable=$(zenity --entry)
As jy kyk na die waarde in my_variable nou, dit sal alles getik in die pop-up dialoog inskrywing zenity.
As jy wil 'n soort van vinnige gee oor wat die gebruiker (of jy) in die dialoog sal ingaan nie, voeg die - teks skakelaar met die etiket wat jy wil. Dit lyk iets soos hierdie:
my_variable=$(zenity --entry --text="What's my variable:")
Zenity het baie ander lekker opsies wat vir spesifieke take, sodat jy dalk wil diegene te sien asook met zenity help uit te voer . Een voorbeeld is die -. Kalender opsie wat se laat jy 'n datum van 'n grafiese kalender kies
my_date=$(zenity --calendar)
Watter gee 'n mooi geformatteerde datum op grond van wat die gebruiker gekliek:
echo ${my_date}
gee:
2009/08/05
Daar is ook opsies vir skuiwer keurders, foute, lyste en so aan.
Hoop dit help.
Ek het die xmessage opdrag, wat is 'n soort van goed genoeg nie.
Hier is 'n bietjie Tcl script wat sal doen wat jy wil. Die Wens tolk moet geïnstalleer word by verstek op Ubuntu.
#!/usr/bin/wish
pack [label .msg -text [lindex $argv 0]]
pack [entry .ent]
bind .ent <KeyPress-Return> { puts [.ent get]; destroy . }
focus .ent
Noem dit soos volg:
myanswer=`gui-prompt "type your answer and press enter"`
alert
en notify-send
lyk dieselfde ding wees. Ek gebruik notify-send
vir nie-toevoer boodskappe as dit nie fokus te steel en ek kan 'n manier om op te hou zenity ens uit om dit te doen nie vind nie.
Bv.
# 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"
Daar is ook dialog
en die KDE weergawe kdialog
. dialog
word deur Slackware, so dit kan nie dadelik beskikbaar op ander uitkerings wees.
Hoe gaan dit Ubuntu se waarskuwing . Dit kan gebruik word nadat 'n operasie om te waarsku dit klaar en selfs wys rooi kruis ikoon van die operasie is klaar met foute
ls -la; alert
As niks anders is teenwoordig. jy kan 'n xterm van stapel te stuur en eggo in dit, soos volg:
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);'
KDialog en dialoog is albei goeie, maar ek wil Zenity beveel. Vinnig, maklik en baie beter lyk die xmessage of dialoog.