كيفية إظهار مربع رسالة واجهة المستخدم الرسومية من برنامج نصي bash في نظام التشغيل Linux؟

StackOverflow https://stackoverflow.com/questions/7035

سؤال

أنا أكتب بعض نصوص bash الصغيرة ضمن Ubuntu linux.أريد أن أكون قادرًا على تشغيلها من واجهة المستخدم الرسومية دون الحاجة إلى نافذة طرفية لإدخال أي إدخال أو عرض أي إخراج.

الإدخال الوحيد المطلوب حتى الآن هو كلمة مرور لـ sudo - ويتعامل gksudo مع هذه المهمة بشكل جيد.ولكنني لم أجد طريقة سهلة لإظهار مربع الرسالة حتى الآن.هل هناك نوع من أوامر "gkmessage" متاح؟أفضل وجود شيء موجود في تثبيت Ubuntu الافتراضي، ولكن لا أمانع في تثبيت حزمة جديدة إذا لزم الأمر.

هل كانت مفيدة؟

المحلول

أعتقد زينيتي سوف تفعل ما تريد.لقد تم تصميمه خصيصًا لعرض مربعات حوار GTK من سطر الأوامر، وهو متاح كملف حزمة أوبونتو.

نصائح أخرى

إذا كنت تستخدم أوبونتو العديد من التوزيعات notify-send سيقوم الأمر بإلقاء أحد تلك الإشعارات اللطيفة القابلة للتلف في الزاوية اليمنى العليا.مثل ذلك:

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

جميل!

الجميع يذكر الزينية، ويبدو أن هناك العديد من الآخرين.توجد قائمة مختلطة ولكنها مثيرة للاهتمام http://alternativeto.net/software/zenity/

أولاً، مثال على zenity الذي يتميز بعلامات تنسيق النص وعنوان النافذة وتسمية الزر.

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"

com.gxmessage

gxmessage "my text"

com.xmessage

xmessage قديم جدًا لذا فهو مستقر وربما يكون متاحًا في جميع التوزيعات التي تستخدم X (نظرًا لأنه موزع مع X).إنه قابل للتخصيص من خلال موارد X، لأولئك الذين يستخدمون Linux أو Unix لفترة كافية لمعرفة ما يعنيه (.Xdefaults, ، أي واحد ؟).

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

com.kdialog

(لم تختبر)

في اتفاقية شراء الطاقة

ياد:Zenity On Steroids [عرض مربعات الحوار الرسومية من نصوص Shell] ~ Web Upd8:مدونة أوبونتو/لينكس.لا يبدو أن حجم مربعات الحوار لصناعة السيارات في الحجم.

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

مثال أكبر

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"

البعض الآخر ليس في مستودعات Ubuntu القياسية

  • com.shellgui
  • com.xdialog
  • com.gtkdialog

خارج الموضوع (للمحطة)

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

لا تتردد في تحرير.

ال زينيتي يبدو أن التطبيق هو ما تبحث عنه.

لأخذ المدخلات من زينيتي, ، يمكنك تحديد متغير والحصول على إخراج زينيتي --دخول المحفوظة إليها.يبدو شيء من هذا القبيل:

my_variable=$(zenity --entry)

إذا نظرت إلى القيمة في my_variable الآن، سيكون هو ما تمت كتابته في مربع حوار الإدخال المنبثق لـ zenity.

إذا كنت تريد تقديم نوع من الإرشادات بشأن ما يجب على المستخدم (أو أنت) إدخاله في مربع الحوار، فقم بإضافة --نص التبديل مع التسمية التي تريدها.يبدو شيء من هذا القبيل:

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

لدى Zenity الكثير من الخيارات الرائعة الأخرى المخصصة لمهام محددة، لذا قد ترغب في التحقق منها أيضًا زينيتي--مساعدة.أحد الأمثلة هو --تقويم الخيار الذي يتيح لك تحديد تاريخ من التقويم الرسومي.

my_date=$(zenity --calendar)

والذي يعطي تاريخًا منسقًا بشكل جيد بناءً على ما نقر عليه المستخدم:

echo ${my_date}

يعطي:

08/05/2009

هناك أيضًا خيارات لمحددات شريط التمرير والأخطاء والقوائم وما إلى ذلك.

أتمنى أن يساعدك هذا.

لقد وجدت com.xmessage الأمر، وهو نوع من جيدة بما فيه الكفاية.

إليك برنامج نصي صغير من Tcl سيفعل ما تريد.يجب تثبيت مترجم Wish افتراضيًا على Ubuntu.

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

نسميها مثل هذا:

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

alert و notify-send يبدو أن نفس الشيء.أنا أستعمل notify-send بالنسبة للرسائل غير المدخلة لأنها لا تسرق التركيز ولا أستطيع إيجاد طريقة لإيقاف زينيتي وما إلى ذلك.من القيام بهذا.

على سبيل المثال

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

يوجد ايضا dialog ونسخة كيدي kdialog. dialog يتم استخدامه بواسطة برنامج slackware، لذلك قد لا يكون متاحًا على الفور في التوزيعات الأخرى.

ماذا عن أوبونتو يُحذًِر.يمكن استخدامه بعد أي عملية للتنبيه بانتهاء العملية وحتى إظهار رمز الصليب الأحمر في حالة انتهاء العملية مع وجود أخطاء

ls -la; alert

إذا لم يكن هناك شيء آخر موجود.يمكنك إطلاق xterm والصدى فيه، مثل هذا:

 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);'

زينيتي هي حقًا الأداة الدقيقة التي أعتقد أنك تبحث عنها.

أو

zenity --help

يعد Kdialog وdialog كلاهما جيدين، لكني أوصي بـ Zenity.مظهر سريع وسهل وأفضل بكثير للرسالة أو الحوار.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top