जब कोई नौकरी / प्रक्रिया समाप्त होती है तो मैं एक अधिसूचना कैसे ट्रिगर कर सकता हूं?


86

मेरे द्वारा काम करने की जगह पर कमांड्स हैं जिन्हें निष्पादित करने में लंबा समय लगता है।

क्या कोई कमांड / उपयोगिता है जिसे मैं कमांड का निष्पादन खत्म होने पर मुझे सूचित करने के लिए उपयोग कर सकता हूं? यह एक पॉपअप विंडो या शायद थोड़ी ध्वनि हो सकती है।


1
@ स्लैक का स्वीकृत उत्तर अच्छा है - मुझे महसूस करना चाहिए कि fg;say "Job finished"यह काम करेगा। लेकिन ... क्या ऐसा कोई तरीका है जिससे इसे और स्वचालित किया जा सके - यानी घंटी बजाना या किसी भी काम को पूरा करने के बाद सूचित करना जो एक मिनट से अधिक की सीमा से अधिक लगता है? क्या कोई शेल वैरिएबल है, उदाहरण के लिए बैश में, जो कि अंतिम कमांड का बीता हुआ समय है?
क्रेजी गेलव

... 2 घंटे बाद, stackoverflow.com/questions/1862510/… ... मिला '(($ टाइमर_शो> $ {LONG_RUNTIME: -300})) && टाइमर_stop में "लंबे समय तक चलने वाला काम पूरा" हुआ ... अगला, emacs 'compile कमांड में जोड़ें ... और मेरी कंकड़ घड़ी को सूचित करें (मुझे फोन सूचनाओं से नफरत है)
Krazy Glew

जवाबों:


119

आमतौर पर, यदि आप कमांड चलाने से पहले यह जानते हैं, तो आप इसे इसके साथ शुरू कर सकते हैं:

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

अब ... इसके बाद आप क्या करना चाहते हैं यह आपके पर्यावरण पर निर्भर करता है।

  • पर किसी भी प्रणाली , आप कर सकते हैं "अंगूठी" टर्मिनल घंटी । आपके सटीक सिस्टम पर निर्भर करता है कि वास्तव में क्या काम करता है (बीएसडी बनाम जीएनयू लिनक्स, आदि), लेकिन tput belक्या करना चाहिए। मैं मज़बूती से इसे अभी परीक्षण नहीं कर सकता, हालांकि। अधिक जानने के लिए "रिंग बेल" खोजें।

  • पर मैक ओएस एक्स , आप एक खोजक संवाद पॉप अप करने के AppleScript इस्तेमाल कर सकते हैं:

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

    आप इसे कुछ कह सकते हैं:

    say "Job finished"
    

    या आप माउंटेन लायन की अधिसूचना प्रणाली का उपयोग कर सकते हैं:

    sudo gem install terminal-notifier # <= only need to do this once
    terminal-notifier -message "Job finished!" -title "Info"
    
  • में गनोम , zenityएक जीटीके संवाद बॉक्स में, कमांड लाइन से कहा जाता है दिखा सकते हैं। इस स्टैक ओवरफ्लो प्रश्न को भी देखें: लिनक्स में बैश स्क्रिप्ट से एक संदेश बॉक्स दिखा रहा है । इसे अपने पसंदीदा पैकेज मैनेजर के माध्यम से स्थापित किया जा सकता है।

    zenity --info --text="Job finished"
    
  • कुछ वितरण हो सकते हैं xmessage। जीटीके वातावरण के लिए विशेष रूप से, वहाँ है gxmessage

  • डेस्कटॉप एनवायरमेंट पर , जो डेस्कटॉप नोटिफिकेशन स्पेसिफिकेशन को लागू करते हैं , जैसे कि उबंटू और गनोम , एक नोटिफिकेशन सिस्टम है जिसे आप notify-send(के हिस्से libnotify) के साथ ट्रिगर कर सकते हैं ।

    notify-send "Job finished!"
    
  • kdialogउदाहरण के लिए केडीई का उपयोग करता है :

    kdialog --passivepopup 'Job finished'
    

मुझे पता है कि तुम क्या आदेश का इस्तेमाल किया! मैंने कुछ अन्य विकल्प भी जोड़े।
slhck

मैं अधिसूचित-भेजने और xmessage के साथ चारों ओर चक्कर लगा रहा हूं। दोनों ही दिलचस्प लग रहे हैं! यहाँ अगली बात मैं देख रहा हूँ - superuser.com/questions/345463/…
उत्कर्ष सिन्हा

2
मैक ओएस एक्स पर, आप कमांड-लाइन उपयोगिता "कहो" का भी उपयोग कर सकते हैं। वहाँ भी कई आवाजें उपलब्ध हैं, "कह
-ह

1
आप क्यों सुझाव दे रहे हैं कि "कमांड-आफ्टर" को अतुल्यकालिक रूप से चलाया जाना चाहिए? क्या आपके कहने का मतलब है (command; command-after) &?
जी-मैन

यह समाधान कोनो कंसोल उपयोगकर्ताओं के लिए है और यह एक संपूर्ण समाधान नहीं है क्योंकि यह आपके कमांड पर निर्भर करता है जब तक कि यह पूर्ण नहीं होता है, या पूरी तरह से चुप (कोई आउटपुट) नहीं होता है जब तक कि यह उस बिंदु पर पूरा नहीं होता है जब तक कि शीघ्र रिटर्न नहीं मिलता है। हालाँकि, यह वही है जिसकी मुझे ज़रूरत थी जब मैं मदद की तलाश में आया था। आप किसी सूचना को पॉप-अप करने के लिए कॉनसोल को कॉन्फ़िगर कर सकते हैं, एक ध्वनि चला सकते हैं, आदि। फिर आपको शेल मॉनिटरिंग चालू करना होगा। मौन के लिए मॉनिटर करें यदि आपका कमांड पूरा होने तक सामान का एक गुच्छा आउटपुट करता है, या मौन यदि यह कुछ भी प्रिंट नहीं करता है और फिर शेल रिटर्न करता है।
22

20

यूनिक्स जैसी प्रणालियों पर आप श्रव्य-घंटी को बजा सकते हैं:

echo -e "\a"

यह मैक पर एक संदेश अधिसूचना के अलावा वास्तव में उपयोगी है
सायरन

2
उसी के रूप मेंtput bel
ड्वाइट स्पेंसर


5

ध्वनि सूचना प्राप्त करने के लिए आप इसका उपयोग कर सकते हैं spd-say "Some text"। उदाहरण:

some-command; spd-say "Yo"

क्या ओएस? मैं इसे मैक या उबंटू पर नहीं देखता
एडवर्ड फॉक

@EdwardFalk मैं Ubuntu का उपयोग कर रहा
milkovsky

ठीक है, मैं एक पुराने संस्करण का उपयोग कर रहा हूं, इसलिए शायद यह नए संस्करणों में है।
एडवर्ड फाक

1
यह केवल एक पाठ से वाक् अनुप्रयोग है। आप इसके माध्यम से स्थापित कर सकते हैं sudo apt-get install speech-dispatcher। या विकल्प का उपयोग पूछेंububuntu.com/questions/501910/…
दूधोवस्की

आह, डिफ़ॉल्ट रूप से स्थापित नहीं है? मुझे उसके बारे में सोचना चाहिए था। लिंक के लिए धन्यवाद।
एडवर्ड फाक

4

मैंने अभी-अभी Cygwin के डेस्कटॉप नोटिफिकेशन के लिए notifu का उपयोग करना शुरू किया है। यह विंडोज के लिए कमांड लाइन नोटिफिकेशन ऐप है।

उदाहरण:

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

4

मैंने ntfyठीक इसी उद्देश्य से लिखा था । यह क्रॉस-प्लेटफ़ॉर्म है और लंबे समय तक चलने वाले कमांड खत्म होने पर स्वचालित रूप से सूचनाएं भेज सकता है ।

यदि आपके पास पायथन है pip(सबसे लिनक्स डिस्ट्रोस और मैकओएस है), तो यहां बताया गया है कि इसे कैसे स्थापित किया जाए और स्वचालित सूचनाएं सक्षम करें:

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

इसे http://ntfy.rtfd.io पर देखें

इसके अलावा, यह भी कर सकते हैं:

  • जब टर्मिनल अग्रभूमि (X11, iTerm2 और Terminal.app में डिफ़ॉल्ट रूप से समर्थित और सक्षम) हो तो स्वत: सूचनाएँ
  • क्लाउड-आधारित सूचनाएँ भेजें (पुशओवर, पुशबुलेट, और XMPP)
  • प्रक्रिया समाप्त होने पर सूचनाएं भेजने के लिए उपयोग किया जाना चाहिए (उपरोक्त स्वचालित समर्थन नहीं)
  • मैन्युअल रूप से सूचनाएं भेजें (स्क्रिप्ट में उपयोग के लिए अच्छा है!)

आप पर अच्छा। यह वास्तव में सबसे उपयोगी जवाब है।
एडम बिटलिंगमेयर

मैं सहमत हूँ। मैं अपने डेस्कटॉप पर एक अधिसूचना प्रदर्शित करने के लिए इसका उपयोग करता हूं और उसी समय मेरे फोन पर अधिसूचना को धक्का देता हूं।
माइकल

3

लिनक्स के लिए, हर बार अधिसूचना के लिए एक कमांड टाइप किए बिना यह करने के लिए एक निफ्टी चाल है।

सबसे पहले ऑटोकाइ इंस्टॉल करें। यह विभिन्न कीस्ट्रोक्स के लिए क्रियाओं को परिभाषित करने में मदद करता है।

sudo apt-get install autokey-gtk

अब, ऑटोके में एक नया वाक्यांश परिभाषित करें और हॉटकी को Alt + Enter के रूप में निर्दिष्ट करें। इस वाक्यांश को जोड़ें:

; notify-send "Job finished!" &
  #

ध्यान दें कि पहली पंक्ति के बाद एक नई लाइन महत्वपूर्ण है।

इसके अलावा, एक विंडो फ़िल्टर जोड़ें। मैं गाइक और टर्मिनल का उपयोग करता हूं। जो भी अन्य टर्मिनल आप उपयोग करते हैं उसे शामिल करें।

.*(guake)|(Terminal).*

हो गया!!

अब, जब भी आपको कमांड के लिए सूचना प्राप्त करने की आवश्यकता होती है, तो इसे एंटर / रिटर्न के बजाय Alt + Enter का उपयोग करके चलाएं।

स्रोत: http://dotpad.blogspot.in/2014/12/notification-when-command-finished.html


3

यद्यपि अन्य उत्तर पहले से ही समाप्त नौकरी पर सूचनाएं प्राप्त करने के अधिकांश तरीकों को कवर करते हैं, मैं अपने दो सेंट देना चाहता हूं क्योंकि आपने निम्नलिखित प्रारूप में अपना प्रश्न पूछा था:

मेरे द्वारा काम करने की जगह पर कमांड्स हैं जिन्हें निष्पादित करने में लंबा समय लगता है।

मेरी भी यही समस्या है। कभी-कभी कुछ 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
}

यह पुशओवर ऐप का उपयोग मेरे फोन पर एक अधिसूचना को धकेलने के लिए करता है। इस तरह मैं दोपहर के भोजन पर जा सकता हूं या एक बैठक में प्रवेश कर सकता हूं और फिर भी नौकरी छोड़ने से पहले अपने कंप्यूटर पर शुरू की गई नौकरियों पर अधिसूचित हो सकता हूं।

मैं इसे निम्नलिखित तरीके से उपयोग करता हूं:

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

इसलिए, यदि कमांड एक सही निकास कोड देता है, तो पहला धक्का निष्पादित किया जाएगा। एक त्रुटि पर, दूसरे को निष्पादित किया जाएगा।

Ofc आपको पुशओवर पर एक उपयोगकर्ता बनाने और https://pushover.net/ से सूचनाएं भेजने के लिए एक ऐप रजिस्टर करने की आवश्यकता है

उम्मीद है कि यह मदद की!


ठीक है, तो "पुशओवर" एक वेब सेवा है जो "पुशओवर" ऐप स्थापित करने वाले फोन को सूचनाएं भेजती है?
एडवर्ड फॉक

1
यह एक वेब सेवा है जो आधुनिक वेब ब्राउज़र के साथ फोन, कंप्यूटर और सब कुछ के लिए सूचनाएं भेजती है । तो, आप अपने पीसी और फोन पर पुशओवर खोल सकते हैं और सभी उपकरणों पर अधिसूचित हो सकते हैं। साफ-सुथरा, ना? :-)
थॉटूकोगुइ जुएल

1

यदि आप अपने इंटरेक्टिव शेल के रूप में csh या tsh का उपयोग करते हैं, तो आप notifyकमांड का उपयोग कर सकते हैं :

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

आप के साथ बैश में एक समान प्रभाव प्राप्त कर सकते हैं set -bया set -o notify

यह संभवतः आपकी आवश्यकताओं को पूरा नहीं करता है, क्योंकि यह सब एक संदेश मुद्रित करता है; मुझे नहीं लगता कि इसे विंडो को पॉप अप करने या घंटी बजाने के लिए कॉन्फ़िगर किया जा सकता है।


मैं यह जानने की कोशिश कर रहा हूं कि क्या नौकरी खत्म हो गई है या नहीं। हालांकि धन्यवाद!
उत्कर्ष सिन्हा


1

यदि आप उपयोग कर रहे हैं npmतो नोड-नोटिफ़ायर एक क्रॉस-प्लेटफ़ॉर्म समाधान प्रदान करते हैं

notify -t "Agent Coulson" --icon https://raw.githubusercontent.com/mikaelbr/node-notifier/master/example/coulson.jpg -m "Well, that's new. "

पूर्वावलोकन

  • लिनक्स केडीई

लिनक्स केडीई

  • खिड़कियाँ

खिड़कियाँ

  • मैक ओ एस

मैक

  • बादल की गरज

बादल की गरज


1

काश मैंने इस धागे को सालों पहले देखा होता। मेरा समाधान अनिवार्य रूप से स्लॉक के समान ही था, लेकिन मैंने एक पटकथा लिखी। मैं इसका हर समय उपयोग करता हूं। इसे साझा करने के लिए यहां पोस्ट कर रहा हूं।

#!/bin/bash

msg='all done'
quiet=false
if [ "$1" = '-q' ]; then quiet=true; shift; fi
if [ $# -gt 0 ]; then msg="$*"; fi

echo -ne "\x1b]0;$msg\a"
if [ -x /usr/bin/zenity ]; then
  unset WINDOWID
  exec zenity --info --text="$msg"
elif [ -x /usr/bin/xmessage ]; then
  exec xmessage -nearmouse "$msg"
elif [ -x /usr/bin/osascript ]; then
  if ! $quiet; then say "done" &; fi
  osascript -e "tell application \"System Events\" to display dialog \"$msg\""
else
  echo $msg
fi

स्पष्टीकरण का एक छोटा सा हिस्सा: स्ट्रिंग "\x1b]0;$msg\a"उस संदेश को खिड़की के टाइटल बार में डालने के लिए एएनएसआई एस्केप अनुक्रम है जिसमें से इसे निष्पादित किया गया था। मुझे लगता है कि यह कभी-कभी देखने में सक्षम होता है कि यह संदेश किस विंडो से आया था।


1

तो यह काफी देर से आता है, लेकिन मैंने ऐसा करने के लिए एक प्रणाली का उपयोग करना शुरू कर दिया है: मेरे पास एक बैश स्क्रिप्ट है जो जो कुछ भी कमांड को पारित करता है उसे उसके बाद से निष्पादित करता है

http://somesh.io/2017/02/19/get-notified-when-long-commands-are-done-executing-on-ubuntu/

#!/bin/bash


# file location : /usr/bin/n

set +e


# $@ executes whatever command is typed after the filename

$@


notify-send "Task Completed"

और फिर मैं बस एन prepend n

n bundle install
n npm install

0

एक अन्य संभावना है alert, लिनक्स पर काम करता है।

>any-command; alert

यह इमेज के अनुसार एक नोटिफिकेशन देता है। चेतावनी सूचना


0

मैंने एक ऐसा ऐप बनाया है जो एक प्रक्रिया समाप्त होने पर आपके एंड्रॉइड फोन पर एक सूचना भेजेगा ताकि आपको अपने कंप्यूटर पर टेदर न करना पड़े।

इंस्टॉल करें, फिर ;notifier.shअपने कमांड के अंत में जोड़ें ।

उदाहरण के लिए, यदि आपकी आज्ञा थी make install, तो आप अपना आदेश देंगे:

make install; notifier.sh

https://notifier.sh

https://play.google.com/store/apps/details?id=sh.notifier

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.