Làm cách nào để hiển thị hộp thông báo GUI từ tập lệnh bash trong linux?


151

Tôi đang viết một vài tập lệnh bash nhỏ trong Ubuntu linux. Tôi muốn có thể chạy chúng từ GUI mà không cần cửa sổ đầu cuối để nhập bất kỳ đầu vào hoặc xem bất kỳ đầu ra nào.

Cho đến nay, đầu vào duy nhất cần có là mật khẩu cho sudo - và gksudo xử lý tốt. Nhưng tôi chưa tìm thấy một cách dễ dàng để hiển thị một hộp thông báo. Có một số loại lệnh 'gkmessage' có sẵn? Tôi thích thứ gì đó có trong cài đặt Ubuntu mặc định, nhưng tôi không ngại cài đặt gói mới nếu cần.


Câu trả lời:


143

Tôi tin rằng Zenity sẽ làm những gì bạn muốn. Nó được thiết kế đặc biệt để hiển thị các hộp thoại GTK từ dòng lệnh và nó có sẵn dưới dạng gói Ubuntu .


4
zenity --helpkhông phải là rất hữu ích Để làm cho điều này hữu ích, bạn cần đảm bảo rằng bạn đã thiết lập --text=My text heređể làm cho nó hiển thị một cái gì đó ...
Stephen

10
Ví dụ:zenity --info --text="Calculation complete"
Craig McQueen

3
@Stephen, vì một số lý do kỳ lạ, lệnh chính xác là zenity --help-all.
GKFX

3
Tôi không thích các chương trình cần mở màn hình để in thông báo trợ giúp ...
thoni56

Tôi sử dụng phương pháp này để hiển thị các cảnh báo hoặc lỗi trong .xinitrckhi khởi động xorgmáy chủ của mình . Nếu không, các lỗi sẽ được minh bạch. Tôi cũng thích điều này zenityhơn kdialogvì KDE chưa bắt đầu và GTK libs nhẹ hơn.
cmevoli

152

Nếu bạn đang sử dụng Ubuntu, nhiều bản phân phối, notify-sendlệnh sẽ ném một trong những thông báo dễ hỏng đó ở góc trên bên phải. Thích như vậy:

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

Xinh đẹp!


2
Điều này cũng làm việc với Fedora. Tôi khá chắc chắn rằng bất kỳ bản phân phối Linux nào cũng có thể làm điều này.
kmatheny

4
Không hoạt động trên Raspbian GNU / Linux 7. Có gói nào cần được cài đặt không?
carl verbiest

1
trong repos debian: tìm kiếm apt-cache notify-osd @carlverbiest
santa

2
ít nhất trong Ubuntu 14.04, nếu gọi thông báo-gửi với thời gian chờ 0 như vậy "thông báo-gửi -t 0 'xin chào!'" bạn sẽ nhận được hộp thoại bật lên không hết hạn.
vancan1ty

Trong Debian Jessie libnotify-bingói chứa notify-sendnhị phân. Gnome3 dường như không yêu cầu notify-osdnhưng tôi đoán các môi trường máy tính để bàn khác có thể yêu cầu ngoàilibnotify-bin
Jasen

78

Mọi người đều đề cập đến sự yên tĩnh, dường như có nhiều người khác. Một danh sách hỗn hợp nhưng thú vị có tại http://alternativeto.net/software/zenity/

Đầu tiên, một ví dụ về sự tiện nghi có tính năng đánh dấu định dạng văn bản, tiêu đề cửa sổ, nhãn nút.

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

xmessagelà rất cũ nên nó ổn định và có thể có sẵn trong tất cả các bản phân phối sử dụng X (vì nó được phân phối với X). Nó có thể tùy chỉnh thông qua các tài nguyên X, cho những người đã sử dụng Linux hoặc Unix đủ lâu để biết ý nghĩa của nó ( .Xdefaults, có ai không?).

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

kdialog

(không được kiểm tra)

Trong một PPA

YAD: Zenity On Steroids [Hiển thị các hộp thoại đồ họa từ Shell Script] ~ Web Upd8: Blog Ubuntu / Linux . Không có vẻ như hộp thoại kích thước tự động.

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

Một ví dụ lớn hơn

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"

Những người khác không có trong kho tiêu chuẩn Ubuntu

  • shellgui
  • xdialog
  • gtkdialog

Off-topic (cho thiết bị đầu cuối)

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

Hãy chỉnh sửa.



@ThorSummoner cảm ơn vì tiền boa. Đối với người đọc quan tâm, sự khác biệt là whiptail --infobox(không hoạt động chính xác trên các thiết bị đầu cuối hỗ trợ màn hình thay thế) trả về mà không cần chờ người dùng nhập vào, trong khi whiptail --msgbox(hoạt động) chờ xác nhận của người dùng trước khi thoát.
Stéphane Gourichon

Tôi nhớ rằng không hài lòng với hộp thư, vì mục đích của tôi tại thời điểm đó, tôi nghĩ rằng tôi cần đầu ra để có thể xem được trong nhật ký hoặc một cái gì đó tương tự;
ThorSummoner

Rất nhiều lựa chọn! Ví dụ khá hay
artu-hnrq

49

Các zenity xuất hiện ứng dụng là những gì bạn đang tìm kiếm.

Để lấy đầu vào từ zenity , bạn có thể chỉ định một biến và có đầu ra của zenity --entry được lưu vào nó. Nó trông giống như thế này:

my_variable=$(zenity --entry)

Nếu bạn nhìn vào giá trị trong my_variable bây giờ, nó sẽ là bất cứ thứ gì được nhập vào hộp thoại nhập cảnh bật lên.

Nếu bạn muốn đưa ra một số lời nhắc về những gì người dùng (hoặc bạn) nên nhập trong hộp thoại, hãy thêm công tắc --text với nhãn mà bạn muốn. Nó trông giống như thế này:

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

Zenity có rất nhiều tùy chọn tốt đẹp khác dành cho các nhiệm vụ cụ thể, vì vậy bạn có thể muốn kiểm tra những điều đó cũng với zenity --help . Một ví dụ là tùy chọn --calWiki cho phép bạn chọn một ngày từ lịch đồ họa.

my_date=$(zenity --calendar)

Cung cấp một ngày được định dạng độc đáo dựa trên những gì người dùng đã nhấp vào:

echo ${my_date}

cho:

08/05/2009

Ngoài ra còn có các tùy chọn cho bộ chọn thanh trượt, lỗi, danh sách, v.v.

Hi vọng điêu nay co ich.


Tôi có thể thấy zentitytrông thật tuyệt. Tuy nhiên, đây không phải là một phần của Ubuntu 12.04, vì vậy tôi đã gxmessagethay thế.
Peter V. Mørch


8

Đây là một đoạn script Tcl nhỏ sẽ làm những gì bạn muốn. Trình thông dịch Wish nên được cài đặt theo mặc định trên Ubuntu.

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

Gọi nó như thế này:

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

7

alertnotify-senddường như là điều tương tự. tôi sử dụngnotify-send cho các tin nhắn không đầu vào vì nó không đánh cắp trọng tâm và tôi không thể tìm cách ngăn chặn sự bình tĩnh, v.v. làm điều này.

ví dụ

# 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

Ngoài ra còn có dialogvà phiên bản KDE kdialog. dialogđược sử dụng bởi slackware, vì vậy nó có thể không có sẵn ngay lập tức trên các bản phân phối khác.


5

nếu không có gì khác bạn có thể khởi chạy một xterm và echo trong đó, như thế này:

 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

Làm thế nào về cảnh báo của Ubuntu . Nó có thể được sử dụng sau bất kỳ thao tác nào để cảnh báo nó đã hoàn thành và thậm chí hiển thị biểu tượng chữ thập đỏ nếu operaton bị phạt có lỗi

ls -la; alert

3

Zenity thực sự là công cụ chính xác mà tôi nghĩ rằng bạn đang tìm kiếm.

hoặc là

zenity --help

0

Cả Kdialog và hộp thoại đều tốt, nhưng tôi khuyên bạn nên dùng Zenity. Nhanh chóng, dễ dàng và tốt hơn nhiều tìm kiếm xmessage hoặc hộp thoại.


0

Ví dụ tập lệnh bash để sử dụng Điều khiển GTK / QT của Gambas (Đối tượng GUI): Gambas IDE có thể được sử dụng để thiết kế các GUI lớn và hoạt động như một máy chủ GUI. Ví dụ về các ví dụ có thể được tải xuống từ cửa hàng Ứng dụng Gambas.
https://gambas.one/gambasfarm/?id=823&action=search

nhập mô tả hình ảnh ở đây

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.