Cum se afișează o casetă de mesaje GUI dintr-un script bash în linux?

Scriu câteva script-uri de bash sub linux Ubuntu. Vreau să le pot rula din GUI fără a avea nevoie de o fereastră terminal pentru a introduce orice intrare sau pentru a vizualiza orice ieșire.

Până în prezent, singura intrare necesară este o parolă pentru sudo - și gksudo se ocupă de acest lucru bine. Dar nu am găsit o modalitate ușoară de a afișa încă o casetă de mesaje. Există oarecum o comandă "gkmessage" disponibilă? Aș prefera ceva prezent într-o instalare Ubuntu, dar nu mă deranjează să instalez un nou pachet dacă este necesar.

0
fr hi bn

11 răspunsuri

Iată un mic script Tcl care va face ceea ce vrei. Interpretul Wish ar trebui instalat implicit pe Ubuntu.

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

Sunați-l astfel:

myanswer=`gui-prompt "type your answer and press enter"`
0
adăugat

Am găsit comanda xmessage , care este destul de bună.

0
adăugat
Asta e bunicul tuturor.
adăugat autor Ciro Santilli 包子露宪 六四事件 法轮功, sursa

Cred că Zenity va face ceea ce doriți. Este special conceput pentru afișarea dialogurilor GTK din linia de comandă și este disponibil ca un pachet Ubuntu .

0
adăugat
De exemplu. zenity --info --text = "Calculele complete"
adăugat autor Craig McQueen, sursa
zenity --help nu este atât de util. Pentru a face acest lucru util, trebuie să vă asigurați că setați - text = Textul meu aici pentru a afișa ceva ...
adăugat autor Stephen, sursa
@Stephen, pentru un motiv ciudat, comanda corectă este zenity --help-all .
adăugat autor GKFX, sursa
Folosesc această metodă pentru a afișa avertismente sau erori în .xinitrc în timp ce pornesc serverul meu xorg . În caz contrar, erorile ar fi transparente. De asemenea, prefer acest zenity peste kdialog deoarece KDE nu a început încă și GTK libs sunt mai ușoare.
adăugat autor cmevoli, sursa
Nu-mi plac programele care trebuie să deschidă ecranul pentru a imprima mesajul de ajutor ...
adăugat autor thoni56, sursa

Everyone mentions zenity, there seem to be many others. A mixed up but interesting list is at http://alternativeto.net/software/zenity/

În primul rând, un exemplu de zenitate cu marcaj de formatare a textului, titlu de fereastră, etichetă cu buton.

zenity \
--info \
--text="Time is $(date +%Hh%M).\n\nGet your coffee." \
--title="Coffee time" \
--ok-label="Sip"

gxmessage

gxmessage "my text"

xmessage

xmessage is very old so it is stable and probably available in all distributions that use X (since it's distributed with X). It is customizable through X resources, for those that have been using Linux or Unix for long enough to know what it means (.Xdefaults, anyone ?).

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

kdialog

(netestate)

Într-un PPA

YAD: Zenity On Steroids [Display Graphical Dialogs From Shell Scripts] ~ Web Upd8: Ubuntu / Linux blog. Does not seem to auto-size dialogs.

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

Un exemplu mai mare

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"

Alții nu în depozitele standard Ubuntu

  • shellgui
  • xdialog
  • gtkdialog

Off-topic (pentru terminal)

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

Nu ezitați să editați.

0
adăugat
@ThorSummoner mulțumesc pentru sfat. Pentru cititorul interesat, diferența este că whiptail --infobox (care nu funcționează corect pe terminalele care acceptă ecranul alternativ) se întoarce fără a aștepta intrarea utilizatorului, în timp ce whiptail --msgbox < code> (care funcționează) așteaptă confirmarea de către utilizator înainte de a ieși.
adăugat autor Stéphane Gourichon, sursa
Îmi amintesc că am fost nemulțumit de msgbox, pentru scopurile mele în acel moment, cred că aveam nevoie ca rezultatul să fie vizibil într-un jurnal sau ceva de genul acesta;
adăugat autor ThorSummoner, sursa

Ce zici de alerta de la Ubuntu. Poate fi folosit după orice operațiune de avertizare a terminat și chiar arăta pictograma roșie în cazul în care operaton a fost finished cu erori

ls -la; alert
0
adăugat

Există, de asemenea, dialog și versiunea KDE kdialog . dialog este folosit de slackware, deci este posibil să nu fie disponibil imediat pe alte distribuții.

0
adăugat

Kdialogul și dialogul sunt amândouă bune, dar aș recomanda Zenity. Rapidă, ușoară și mult mai bună în privința mesajului xmessage sau a dialogului.

0
adăugat

Aplicația zenitate pare să fie ceea ce căutați.

Pentru a lua o intrare de la zenitate , puteți specifica o variabilă și puteți salva rezultatul zenity --entry . Arata cam asa:

my_variable=$(zenity --entry)

Dacă te uiți la valoarea din my_variable acum, va fi ceea ce a fost scris în dialogul de intrare pop-up.

Dacă doriți să dați un fel de prompt în ceea ce privește ce ar trebui să introduceți utilizatorul (sau dvs.) în dialog, adăugați comutatorul - text cu eticheta dorită. Arata cam asa:

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

Zenity are multe alte opțiuni frumoase care sunt pentru anumite sarcini, așadar vă recomandăm să le verificați și pe zenity --help . Un exemplu este opțiunea - calendar care vă permite să selectați o dată dintr-un calendar grafic.

my_date=$(zenity --calendar)

Ceea ce dă o dată frumos formatată în funcție de ce a făcut clic utilizatorul:

echo ${my_date}

dă:

08/05/2009

Există, de asemenea, opțiuni pentru selectori de glisor, erori, liste și așa mai departe.

Sper că acest lucru vă ajută.

0
adăugat
Pot vedea zentity arata grozav. Cu toate acestea, nu face parte din Ubuntu 12.04, așa că m-am dus în schimb cu gxmessage .
adăugat autor Peter V. Mørch, sursa

Dacă utilizați Ubuntu multe distras comanda notify-send va arunca una din aceste notificări perisabile frumos în colțul din dreapta sus. Ca astfel:

notify-send "Numele meu este bash și am rock house"

Frumoasa!

0
adăugat
Nu funcționează în Ubuntu 17.10 cu Gnome-Flashback
adăugat autor Ondra Žižka, sursa
în repo debian: apt-cache search notify-osd @carlverbiest
adăugat autor santa, sursa
Aceasta funcționează și cu Fedora. Sunt foarte sigur că orice distribuție Linux poate face acest lucru.
adăugat autor kmatheny, sursa
În Debian Jessie pachetul libnotify-bin conține binarul notify-send . Gnome3 nu pare să necesite notify-osd , dar cred că alte medii desktop ar putea necesita ca pe lângă libnotify-bin
adăugat autor Jasen, sursa
funcționează în Cent OS cu Gnome
adăugat autor Jerry T, sursa
Acest lucru este, de asemenea, disponibil în mod implicit pe Slackware 14.2
adăugat autor DaveGauer, sursa
Mulțumiri. Este într-adevăr b. A.utiful!
adăugat autor James Selvakumar, sursa
Nu funcționează pe Raspbian GNU / Linux 7. Există un pachet care trebuie instalat?
adăugat autor carl verbiest, sursa
în Ubuntu 14.04 cel puțin, în cazul în care apelul notificare-trimite cu timeout 0 cum ar fi "notify-send -t 0" hi there! "" veți obține un dialog pop-up care nu expiră.
adăugat autor vancan1ty, sursa
Dar notificare-trimite nu acceptă nici o intrare
adăugat autor Xen2050, sursa

alert and notify-send seem to be the same thing. I use notify-send for non-input messages as it doesn't steal focus and I cannot find a way to stop zenity etc. from doing this.

de exemplu.

# 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"
0
adăugat

dacă nimic altceva nu este prezent. puteți lansa un xterm și un ecou în el, după cum urmează:

 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);'
0
adăugat