Bagaimana cara menunjukkan kotak pesan GUI dari skrip bash di linux?


151

Saya sedang menulis beberapa skrip bash kecil di bawah Ubuntu linux. Saya ingin dapat menjalankannya dari GUI tanpa perlu jendela terminal untuk memasukkan input atau melihat output apa pun.

Sejauh ini, satu-satunya input yang diperlukan adalah kata sandi untuk sudo - dan gksudo menangani itu dengan baik. Tapi saya belum menemukan cara mudah untuk menampilkan kotak pesan. Apakah ada semacam perintah 'gkmessage' yang tersedia? Saya lebih suka sesuatu yang ada di instalasi Ubuntu default, tapi saya tidak keberatan menginstal paket baru jika perlu.


Jawaban:


143

Saya percaya Zenity akan melakukan apa yang Anda inginkan. Ini dirancang khusus untuk menampilkan dialog GTK dari baris perintah, dan tersedia sebagai paket Ubuntu .


4
zenity --helptidak begitu membantu. Agar ini bermanfaat, Anda perlu memastikan bahwa Anda menetapkan --text=My text hereuntuk membuatnya menampilkan sesuatu ...
Stephen

10
Misalnyazenity --info --text="Calculation complete"
Craig McQueen

3
@Stephen, untuk beberapa alasan aneh perintah yang benar adalah zenity --help-all.
GKFX

3
Saya tidak suka program yang perlu membuka layar untuk mencetak pesan bantuan ...
thoni56

Saya menggunakan metode ini untuk menampilkan peringatan atau kesalahan dalam saya .xinitrcsaat memulai xorgserver saya . Kalau tidak, kesalahannya akan transparan. Saya juga lebih suka ini zenitylebih kdialogkarena KDE tidak mulai belum dan GTK libs lebih ringan.
cmevoli

152

Jika Anda menggunakan banyak distro di Ubuntu , notify-sendperintah akan membuang salah satu notifikasi yang mudah rusak di sudut kanan atas. Seperti itu:

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

Cantik!


2
Ini bekerja dengan Fedora juga. Saya cukup yakin bahwa setiap distro Linux dapat melakukan ini.
kmatheny

4
Tidak berfungsi pada Raspbian GNU / Linux 7. Apakah ada paket yang perlu diinstal?
carl verbiest

1
di repo debian: pencarian apt-cache notify-osd @carlverbiest
santa

2
setidaknya di Ubuntu 14,04, jika panggilan notify-send dengan batas waktu 0 seperti "notify-send -t 0 'hi there!'" Anda akan mendapatkan dialog sembulan yang tidak kedaluwarsa.
vancan1ty

Dalam Debian Jessie libnotify-binpaket berisi notify-sendbiner. Gnome3 tampaknya tidak membutuhkan notify-osdtetapi saya kira lingkungan desktop lain mungkin mensyaratkan bahwa selainlibnotify-bin
Jasen

78

Semua orang menyebutkan keheningan, sepertinya ada banyak yang lain. Daftar campuran tetapi menarik ada di http://alternativeto.net/software/zenity/

Pertama, contoh zenity yang menampilkan markup pemformatan teks, judul jendela, label tombol.

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"

xpesan

xmessagesudah sangat tua sehingga sangat stabil dan mungkin tersedia di semua distribusi yang menggunakan X (karena didistribusikan dengan X). Ia dapat dikustomisasi melalui sumber daya X, bagi mereka yang telah menggunakan Linux atau Unix cukup lama untuk mengetahui apa artinya ( .Xdefaults, siapa saja?).

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

kdialog

(tidak diuji)

Dalam PPA

YAD: Zenity On Steroid [Tampilkan Dialog Grafis Dari Shell Scripts] ~ Web Upd8: blog Ubuntu / Linux . Tampaknya tidak dialog ukuran otomatis.

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

Contoh yang lebih besar

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"

Yang lain tidak dalam repositori standar Ubuntu

  • shellgui
  • xdialog
  • gtkdialog

Di luar topik (untuk terminal)

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

Jangan ragu untuk mengedit.



@ Thormonmon terima kasih atas tipnya. Untuk pembaca yang tertarik, perbedaannya adalah whiptail --infobox(yang tidak berfungsi dengan baik pada terminal yang mendukung layar alternatif) kembali tanpa menunggu input pengguna, sementara whiptail --msgbox(yang berfungsi) menunggu konfirmasi pengguna sebelum keluar.
Stéphane Gourichon

Saya ingat tidak puas dengan kotak pesan, untuk tujuan saya pada saat itu, saya pikir saya membutuhkan output untuk dapat dilihat dalam log atau sesuatu seperti itu;
ThorSummoner

Banyak pilihan! Contoh yang cukup bagus
artu-hnrq

49

The zenity muncul aplikasi untuk menjadi apa yang Anda cari.

Untuk mengambil input dari zenity , Anda dapat menentukan variabel dan memiliki output dari zenity --poin disimpan ke dalamnya. Itu terlihat seperti ini:

my_variable=$(zenity --entry)

Jika Anda melihat nilai dalam my_variable sekarang, itu akan menjadi apa pun yang diketik dalam dialog entri pop up zenity.

Jika Anda ingin memberikan semacam prompt tentang apa yang harus dimasukkan pengguna (atau Anda) dalam dialog, tambahkan saklar --text dengan label yang Anda inginkan. Itu terlihat seperti ini:

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

Zenity memiliki banyak opsi bagus lain untuk tugas tertentu, jadi Anda mungkin ingin memeriksanya juga dengan zenity --help . Salah satu contoh adalah opsi --calendar yang memungkinkan Anda memilih tanggal dari kalender grafis.

my_date=$(zenity --calendar)

Yang memberikan tanggal yang diformat dengan baik berdasarkan apa yang diklik pengguna:

echo ${my_date}

memberi:

08/05/2009

Ada juga opsi untuk pemilih slider, kesalahan, daftar dan sebagainya.

Semoga ini membantu.


Saya bisa melihat zentityterlihat keren. Namun itu bukan bagian dari Ubuntu 12,04, jadi saya gxmessagemalah menggunakannya.
Peter V. Mørch


8

Berikut ini adalah skrip Tcl kecil yang akan melakukan apa yang Anda inginkan. Interpreter Wish harus diinstal secara default di Ubuntu.

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

Sebut saja seperti ini:

myanswer=`gui-prompt "type your answer and press enter"`

7

alertdan notify-sendsepertinya hal yang sama. Saya menggunakan notify-senduntuk pesan non-input karena tidak mencuri fokus dan saya tidak dapat menemukan cara untuk menghentikan zenity dll dari melakukan ini.

misalnya

# 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"

6

Ada juga dialogversi dan KDE kdialog. dialogdigunakan oleh slackware, jadi mungkin tidak segera tersedia di distribusi lain.


5

jika tidak ada lagi yang hadir. Anda dapat meluncurkan xterm dan gema di dalamnya, seperti ini:

 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

Bagaimana dengan peringatan Ubuntu . Hal ini dapat digunakan setelah operasi apa pun untuk mengingatkannya selesai dan bahkan menunjukkan ikon palang merah jika operasi selesai dengan kesalahan

ls -la; alert

3

Zenity benar-benar alat yang tepat yang saya pikir Anda cari.

atau

zenity --help

0

Kdialog dan dialog keduanya bagus, tapi saya akan merekomendasikan Zenity. Cepat, mudah, dan jauh lebih baik mencari xmessage atau dialog.


Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.