จะสร้างกล่องข้อความจากบรรทัดคำสั่งได้อย่างไร


65

มีกล่องข้อความ GUI หรือกล่องข้อความที่แสดงภายในเทอร์มินัล

นอกจากนี้ยังเป็นเรื่องที่น่าสนใจที่จะสามารถรับอินพุตจากผู้ใช้เช่นปุ่มใช่ / ไม่ใช่หรือปุ่มตัวเลือก


8
คุณหมายถึงอะไรโดย "กล่องข้อความ"? กล่องแจ้งเตือนกราฟิกกล่องข้อความป๊อปอัพ? อื่น ๆ อีก?
polym

คำตอบ:


110

สำหรับกล่อง "รอบข้อความ" มาตรฐานให้ใช้boxes:

echo 'This is a test' | boxes

boxesจะมีลักษณะเช่นนี้ (อันแรกอันที่สองเป็นแบบกำหนดเองcowsay):

สกรีนช็อตของกล่อง asterix และสุนัข ASCII ที่มีสัญลักษณ์


หากคุณหมายถึงกล่องเตือนให้ใช้notify-send:

notify-send 'title' 'message'

notify-send มีลักษณะเช่นนี้:

ข้อความป๊อปอัปกำลังอ่าน "Hello Ashframe ... "


คุณยังสามารถใช้zenityสำหรับหน้าต่างป๊อปอัป:

zenity --error --text="An error occurred\!" --title="Warning\!"

Zenity เป็นกราฟิกมากกว่าและมีตัวเลือกเพิ่มเติมเช่นให้หน้าต่างปรากฏเป็นคำถามโดยใช้:

zenity --question --text="Do you wish to continue/?"

หรือแม้กระทั่งแถบความคืบหน้าโดยใช้:

find /usr | zenity --progress --pulsate --auto-close --auto-kill --text="Working..."

zenity มีลักษณะเช่นนี้:

ข้อผิดพลาดคำถามข้อมูลและกล่องโต้ตอบคำเตือนด้วยปุ่ม


หรือใช้dialogสำหรับกล่องข้อความเฉพาะบรรทัดคำสั่ง:

dialog --checklist "Choose OS:" 15 40 5 \
1 Linux off \
2 Solaris on \
3 'HP UX' off \
4 AIX off

dialog มีลักษณะเช่นนี้:

โต้ตอบ TUI ด้วย 4 ตัวเลือก


ตัวเลือกอื่นคือwhiptail:

whiptail --title "Example Dialog" --msgbox "This is an example of a message box. You must hit OK to continue." 8 78

whiptail มีลักษณะเช่นนี้:

กล่องป๊อปอัป whiptail พร้อมปุ่มข้อความสองปุ่ม


และถ้าคุณบ้าอย่างแท้จริงใช้toilet:

toilet -F border -F gay "CRAZY"

toilet มีลักษณะเช่นนี้:

กล่องข้อความที่มีสีสันอ่าน "CRAZY"


3
คำตอบที่สมบูรณ์จริงๆมันมีประโยชน์! ขอขอบคุณ!

เขียนยอดเยี่ยม @polym - ฉันจะใช้zenityเพื่อทำให้ตัวเองเครียดเดือนละครั้งในแผนกอัปเดตและอัปเกรด ...
Frank Nocke

27

xmessage

นี่คือปู่ของการแจ้งเตือน GUI:

xmessage -center "Hello, World!"

ความดีย้อนยุคบริสุทธิ์

ฉันเดิมพันด้วยว่าควรจะมีอยู่ในระบบ X11 อย่างกว้างขวาง

ดังนั้นหัวข้อ: วิธีการแสดงกล่องข้อความ GUI จากสคริปต์ทุบตีในลินุกซ์? | กองล้นมากเกินไป

ทดสอบใน Ubuntu 18.04


ทำงานนอกกรอบในการติดตั้ง Openbox ของฉัน ขอบคุณ!
aexl

xmessageแม้จะติดตั้งบนเซิร์ฟเวอร์ Ubuntu โดยปริยาย ดังนั้นฉันสามารถใช้ssh -Y <host> เพื่อเข้าสู่เครื่องในขณะที่ส่งต่อการเชื่อมต่อ x จากนั้นเรียกใช้some-command; xmessage "some-command is done"เพื่อป๊อปอัพการแจ้งเตือนบนเดสก์ท็อปของฉันเมื่อคำสั่งที่รันเป็นเวลานานเสร็จสิ้น
Stephen Ostermiller

@StephenOstermiller ใช่นั่นเป็นเคล็ดลับที่ดี!
Ciro Santilli 新疆改造中心法轮功六四事件

1
คำสั่งเด็ด xmessage -timeout 10 "Goodbye in 10s!"อัตโนมัติล้างข้อความหลังจากนั้นไม่กี่วินาที
AlainD

8

และเนื่องจาก @ polym เป็นคำตอบที่สมบูรณ์ที่สุดที่ไม่ได้รับการส่งข้อความแบบคลาสสิก:

write <username> [<terminal>]- ส่งข้อความถึงผู้ใช้รายอื่น อาจโต้ตอบหรือเป็นส่วนหนึ่งของไปป์ด้วยecho "message" | write username

เขียน


และส่วนประกอบในการเขียนwallเพื่อส่งข้อความถึงผู้ใช้ทั้งหมด

ผนัง


1

หากคุณยินดีที่จะไพพ์ข้อความไปยัง wrapper Python คุณสามารถใช้terminaltables:

pip3 install colorclass
pip3 install terminaltables

จากนั้นในGitHub Repoคุณสามารถใช้หนึ่งในตัวอย่างในการเขียน wrapper ของไพ ธ อน

ป้อนคำอธิบายรูปภาพที่นี่

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.