سؤال كيف يمكنني تشغيل إشعار عندما تنتهي مهمة / عملية؟


المكان الذي أعمل فيه لديه أوامر تستغرق وقتًا طويلاً للتنفيذ.

هل هناك أمر / أداة يمكن استخدامها لإعلامني عند انتهاء تنفيذ الأمر؟ قد تكون نافذة منبثقة أو ربما صوتًا صغيرًا.


83
2017-10-11 20:22


الأصل


@ الإجابة المقبولة slhck هو بارد - كان يجب أن أدرك ذلك fg;say "Job finished" ستعمل. ولكن ... هل هناك أي طريقة يمكن أن تكون أكثر تلقائية - مثل دق الجرس أو إخطار بعد الانتهاء من أي وظيفة تأخذ أكثر من عتبة مثل دقيقة؟ هل هناك متغير قذيفة ، على سبيل المثال؟ في باش ، هذا هو الوقت المنقضي من الأمر الأخير؟ - Krazy Glew
... بعد ساعتين ، وجدت stackoverflow.com/questions/1862510/... ... put '(($ timer_show> $ {LONG_RUNTIME: -300})) && say "long running job completed"' in timer_stop ... next، add to emacs 'compile commands ... and notify my Pebble watch ( أنا أكره إخطارات الهاتف) - Krazy Glew


الأجوبة:


بشكل عام ، إذا كنت تعرف هذا قبل بتشغيل الأمر ، يمكنك فقط البدء به:

command; command-after &

هذا سوف ينفذ command-after  بعد يخرج الأمر السابق (بغض النظر عن رمز الخروج). ال & سوف تبدأ في الخلفية.

إذا كنت تهتم بمخرج ناجح أو فشل ، فيمكنك استخدام:

command && command-after-only-if-success &
command || command-after-only-if-fail &

إذا كان الأمر قد سابقا بدأ يمكنك استخدام التحكم في الوظيفة لتعليقها ، ثم إعادتها إلى المقدمة fg مقيدًا بإشعارك:

command
# enter Ctrl-z
fg ; command-after

الآن ... ما تريد القيام به بعد ذلك يعتمد على البيئة الخاصة بك.

  • على أي نظام، يمكنك "رنين" جرس المحطة. يعتمد على نظامك بالضبط ما يعمل حقاً (BSD vs. GNU Linux ، إلخ) ، لكن tput bel ينبغي أن تفعل. لم أستطع اختبارها بشكل صحيح الآن ، على الرغم من. ابحث عن "جرس الخاتم" لمعرفة المزيد.

  • على نظام التشغيل Mac OS X، يمكنك استخدام AppleScript لإظهار مربع حوار Finder:

    osascript -e 'tell Application "Finder" to display dialog "Job finished" '
    

    يمكن أن يكون لك قول شيء لك:

    say "Job finished"
    

    أو يمكنك استخدام نظام إشعار Mountain Lion:

    sudo gem install terminal-notifier # <= only need to do this once
    terminal-notifier -message "Job finished!" -title "Info"
    
  • في GNOME، zenity يمكن أن تظهر مربع حوار GTK ، دعا من سطر الأوامر. راجع أيضًا هذا السؤال حول Stack Overflow: عرض مربع رسالة من البرنامج النصي باش في لينكس. يمكن تثبيته من خلال مدير الحزم المفضل لديك.

    zenity --info --text="Job finished"
    
  • بعض التوزيعات قد يكون xmessage. على وجه التحديد لبيئات GTK ، هناك gxmessage.

  • أوبونتو يحتوي على نظام إعلام يمكنك تشغيله notify-send.

    notify-send "Job finished!"
    
  • KDE الاستخدامات kdialog، فمثلا:

    kdialog --passivepopup 'Job finished'
    

114
2017-10-11 20:40



اسمحوا لي أن أعرف ما الأمر الذي استخدمته! أضفت بعض الخيارات الأخرى أيضًا. - slhck
أنا تافه مع إخطار-إرسال و xmessage. كلاهما يبدو مثيرًا للاهتمام! إليك الشيء التالي الذي أبحث عنه - superuser.com/questions/345463/... - Utkarsh Sinha
على نظام التشغيل Mac OS X ، يمكنك أيضًا استخدام الأداة المساعدة لسطر الأوامر "say". هناك أيضا العديد من الأصوات المتاحة ، تحقق "say -h"؛) - trinth
لماذا تقترح أن يتم تشغيل "command-after" بشكل غير متزامن؟ هل تقصد أن أقول (command; command-after) &؟ - G-Man
هذا الحل هو لمستخدمي Konsole وليس الحل الأمثل لأنه يعتمد على الأمر الخاص بك إما أن يكون مطولاً حتى اكتماله ، أو صامت تمامًا (لا يوجد خرج) حتى يكتمل عند النقطة التي تظهر فيها المطالبة. ومع ذلك ، هذا هو بالضبط ما احتاجه عندما جئت للبحث عن المساعدة. يمكنك تهيئة Konsole لإشعار تنبيه ، وتشغيل صوت ، وما إلى ذلك. يجب عليك تشغيل مراقبة shell. راقب الصمت إذا أخرج أمرك مجموعة من الأشياء حتى يكتمل ، أو صمت إذا لم يطبع أي شيء ثم يعود الغلاف. - MrMas


في الأنظمة التي تشبه يونكس ، يمكنك قرع الجرس السمعي:

echo -e "\a"

19
2017-10-10 18:29



هذا مفيد حقا بالإضافة إلى إخطار رسالة على ماك - Sirens
مثل tput bel - Dwight Spencer


لقد قمت بإنشاء أداة بسيطة ، لنظام MacOS X ، تقوم بهذا بالضبط. https://github.com/vikfroberg/brb

التركيب

$ npm install -g brb

تعليمات

$ sleep 3; brb

8
2018-06-08 10:43





لقد بدأت للتو باستخدام notifu لإشعارات سطح المكتب من Cygwin. إنه تطبيق إخطار سطر الأوامر لنظام التشغيل Windows.

مثال:

ls -l && /c/notifu-1.6/notifu64 /m "This is a simple Notifu message."

4
2017-09-13 07:21





للحصول على إشعار صوتي ، يمكنك استخدامه spd-say "Some text". مثال:

some-command; spd-say "Yo"

4
2017-12-15 17:54



ما نظام التشغيل؟ لا أراه على Mac أو Ubuntu - Edward Falk
EdwardFalk أنا أستخدم أوبونتو - milkovsky
حسنًا ، أنا أستخدم إصدارًا قديمًا جدًا ، لذلك ربما يكون في إصدارات أحدث. - Edward Falk
انها مجرد تطبيق تحويل النص إلى كلام. يمكنك تثبيته عبر sudo apt-get install speech-dispatcher. أو استخدم البدائل askubuntu.com/questions/501910/... - milkovsky
آه ، غير مثبت بشكل افتراضي؟ كان علي التفكير في ذلك. شكرا على الرابط. - Edward Falk


بالنسبة لنظام التشغيل Linux ، هناك خدعة رائعة للقيام بذلك تلقائيًا دون الحاجة إلى كتابة أمر للإشعار في كل مرة.

أولا تثبيت autokey. يساعد هذا في تحديد الإجراءات لضربات المفاتيح المختلفة.

sudo apt-get install autokey-gtk

الآن ، قم بتعريف عبارة جديدة في autokey وقم بتعيين مفتاح التشغيل السريع مثل Alt + Enter. أضف هذه العبارة:

; notify-send "Job finished!" &
  #

لاحظ أن الخط الجديد بعد السطر الأول مهم.

أيضا ، إضافة مرشح النافذة. أنا استخدم guake ومحطة. وتشمل أي محطة أخرى تستخدمها.

.*(guake)|(Terminal).*

انت انتهيت!!

الآن ، في كل مرة عندما تحتاج إلى الحصول على إشعارات لأمر ، قم بتشغيله باستخدام Alt + Enter بدلاً من إدخال / رجوع.

مصدر: http://dotpad.blogspot.in/2014/12/notification-when-command-finished.html


3
2017-12-27 12:39





على الرغم من أن الإجابات الأخرى غطت بالفعل معظم طرق الحصول على إعلامات على وظيفة مكتملة ، فأنا أريد أن أقدم سنتيتي منذ أن طرحت سؤالك في الشكل التالي:

المكان الذي أعمل فيه لديه أوامر تستغرق وقتًا طويلاً للتنفيذ.

لدي نفس المشكلة. في بعض الأحيان يمكن تشغيل شيء لمدة 15 دقيقة.

لدي الوظيفة التالية في .bashrc:

# push a notification to your phone. can be handy if you're running a
# build and you want to be notified when it's finished.
push() {
    curl -s -F "token=PUSHOVER_TOKEN" \
    -F "user=PUSHOVER_USER" \
    -F "title=terminal" \
    -F "message=$1" https://api.pushover.net/1/messages.json > /dev/null 2>&1
}

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

أنا استخدمه بالطريقة التالية:

command_to_run && push "yes! command finished successfully!" || push "awww man! something failed :-("

لذا ، إذا قام الأمر بإرجاع رمز خروج صحيح ، فسيتم تنفيذ الدفعة الأولى. على خطأ ، سيتم تنفيذ الثاني.

تحتاج إلى إنشاء مستخدم على Pushover وتسجيل تطبيق لإرسال إشعارات منه https://pushover.net/

نأمل هذا ساعد!


3
2018-06-23 11:15



حسنًا ، إذا كانت "pushover" عبارة عن خدمة ويب ترسل إشعارات إلى الهواتف التي تم تثبيت تطبيق "pushover" عليها؟ - Edward Falk
إنها خدمة ويب ترسل إشعارات إليها الهواتف وأجهزة الكمبيوتر وكل شيء باستخدام متصفح الويب الحديث. لذلك ، يمكن أن يكون لديك مهمة سهلة الاستخدام مفتوحة على جهاز الكمبيوتر والهاتف الخاص بك ويتم إخطار على جميع الأجهزة. أنيق ، هاه؟ :-) - Thatkookooguy


كتبت ntfy لهذا الغرض بالضبط. أنه عبر منصة ويمكن تلقائيا إرسال الإخطارات عند انتهاء الأوامر الطويلة.

إذا كان لديك بايثون pip (معظم توزيعات Linux و MacOS بها) ، وإليك كيفية تثبيته وتمكين الإشعارات التلقائية:

$ sudo pip install ntfy
$ echo 'eval "$(ntfy shell-integration)"' >> ~/.bashrc
$ # restart your shell

التحقق من ذلك في http://ntfy.rtfd.io

بالإضافة إلى ذلك ، يمكنها أيضًا:

  • قم بإخطار الإخطارات التلقائية عندما تكون المحطة في المقدمة (X11 و iTerm2 و Terminal.app مدعوم وممكّن افتراضيًا)
  • إرسال إشعارات مستندة إلى السحابة (Pushover و Pushbullet و XMPP)
  • أن تستخدم لإرسال الإخطارات عند انتهاء العملية (وليس الدعم التلقائي المذكور آنفاً)
  • إرسال الإخطارات يدويًا (جيد للاستخدام في البرامج النصية!)

3
2018-05-19 15:44



جيد لك، جيد عليك. هذا هو حقا أكثر إجابة قابلة للاستخدام. - A. M. Bittlingmayer
أنا موافق. يمكنني استخدامه لعرض إشعار على سطح المكتب الخاص بي ودفع الإشعار إلى هاتفي في نفس الوقت. - Michael


إذا كنت تستخدم csh أو tcsh كصدفة تفاعلية ، فيمكنك استخدام notify أمر:

% long-running-command &
[1] 14431
% notify %1
% 
(later, when the command finishes)
[1]    Done                          long-running-command

يمكنك تحقيق تأثير مماثل في bash مع set -b أو set -o notify.

ربما هذا لا يلبي متطلباتك ، لأن كل ما يفعله هو طباعة رسالة ؛ أنا لا أعتقد أنه يمكن تهيئتها لظهور نافذة أو قرع الجرس.


1
2017-10-11 21:58



أحاول تجنب النظر إلى القشرة لمعرفة ما إذا كانت المهمة قد انتهت. شكرا على كل حال! - Utkarsh Sinha


على أنظمة مع محاولة "awk"

awk 'BEGIN{ print "\a" }'

كان الوحيد الذي يعمل لي.


1
2017-09-04 07:23



هذا مجرد وسيلة مطولة للصدى \a (جواب ترينث). - David Richerby