जब मेरी आज्ञा हो तो अधिसूचना कैसे प्राप्त करें


64

मैं कमांड लाइन पर कमांड की एक श्रृंखला चला रहा हूं जिसे पूरा होने में लगभग बीस मिनट लगते हैं। मैं अपने मैक पर किसी प्रकार का नोटिफिकेशन देखना चाहता हूं जब ये समाप्त हो जाते हैं तो मुझे टर्मिनल की निगरानी करने की आवश्यकता नहीं होती है जब यह पूरा हो जाता है। क्या इसे करने का कोई तरीका है?

$ svn update . && ant clean build start && *notify_me_somehow*

संपादित करें :

मैं उपयोग कर सकता था xclockलेकिन यह हैक की तरह लगता है। आदर्श रूप से मैं अपने फोन, स्क्रीन आदि जैसे कहीं भी अधिसूचना भेज सकता था।


2
यद्यपि आप कमांड लाइन पर हैं, मुझे लगता है कि यहां उत्तर वास्तव में मैक-विशिष्ट है और यूनिक्स / लिनक्स संबंधित नहीं है। ऐसा इसलिए है क्योंकि मुझे लगता है कि आप शायद Growl और का उपयोग करना चाहते हैं grownlnotify

यह कम से कम मेरे बॉक्स पर कमांड नहीं है।

Growl.info Growl @mattdm द्वारा संदर्भित कार्यक्रम है।
18 फरवरी को jsbillings

जवाबों:


58

(svn update . && ant clean build start && say done) || say error


1
एक &&साथ कई कमांड को चेन ऑपरेट करने के लिए शेल ऑपरेटर्स का उपयोग करने और इसे ||एक त्रुटि को बढ़ाने के लिए सामूहिक या बयान के साथ लपेटने का यह एक अद्भुत उदाहरण है । वास्तव में +1
bmike

2
अच्छा! हालांकि ऐसा करने में सक्षम होने के लिए, मैं त्रुटि बनाम सफलता की जानकारी को छोड़ देता हूं और अपने zsh में एक वैश्विक उपनाम जोड़ा है alias -g sd='; say done':। इसका मतलब है कि मुझे केवल sdकिसी भी कमांड को जोड़ना होगा, और मुझे सूचित करना होगा।
रेप्सर्ट

अच्छा है। और अब मेरे पास खेलने के लिए कुछ है
मार्को प्रिन्स

कोशिश की और दोनों किया और त्रुटि हमेशा कहा जा रहा है :( उदाहरण:(echo alik && echo Orly && say done) || say error
AlikElzin-kilaka

1
बेहद सुविधाजनक। मैं इसके साथ प्रतिध्वनित कर रहा हूं, say -v Zarvoxजो आसपास के क्षेत्र में सभी को कूदता है, यह थोड़ा कम खतरनाक सूचना है।
सिद्धार्थ

52

Mac OS 10.8 में आप अपने आप को Notification Center संदेश भेज सकते हैं (Growl के समान लेकिन Mac OS में निर्मित)।

चेक आउट " ओएस एक्स में कमांड लाइन से सूचना केंद्र पर एक सूचना भेज " कैसे एक रूबी मणि जो आप कमांड लाइन से सूचना भेजने के लिए अनुमति देगा स्थापित करने के लिए देखने के लिए। टर्मिनल में किसी चीज के तथ्य के बारे में देखभाल करने के सामान्य उपयोग के मामले को सरल बनाने के लिए, अपने .bash_profile पर एक उपनाम जोड़ें।

alias notifyDone='terminal-notifier -title "Terminal" -message "Done with task!"'

तो आप बस कर सकते हैं:

$ <long-running task> ; notifyDone

एक बार लंबे समय तक चलने वाला कार्य पूरा होने के बाद आपको एक अच्छा मोडल पॉपअप मिलेगा जो उस पर क्लिक करने तक बना रहता है:

अधिसूचना केंद्र पॉपअप


10
टर्मिनल-नोटिफ़ायर को होमब्रे के माध्यम से भी स्थापित किया जा सकता है brew install terminal-notifier:। तब आप बस लिख सकते हैं myCommand && terminal-notifier -message 'finished'। ओएस एक्स योसेमाइट (10.10.1) पर परीक्षण किया गया।
Pwdr

4
आपको चलाना चाहिए myCommand; terminal-notifier -message 'finished'अन्यथा myCommandविफल होने पर अधिसूचना नहीं दिखाई जाएगी ।
ऐहुर्मन

1
बहुत बढ़िया समाधान! वैसे, यह अन्य ओएस एक्स नोटिफिकेशन की तरह कोई ध्वनि उत्पन्न नहीं करता है। उसके लिए कोई उपाय?
सेक्सीबीट जूल

1
@Cupidvogel आप बस एक sayकमांड जोड़ सकते हैं , जैसे my command ; terminal-notifier -message 'finished' ; say finished
टॉम

2
इस प्रश्न के विभिन्न उत्तर बहुत अधिक विवरण देते हैं: Apple.stackexchange.com/questions/57412/…
जोशुआ गोल्डबर्ग

20

ग्रोएल का उपयोग करें ।

में .dmgफ़ाइल, एक्स्ट्रा कलाकार के लिए, वहाँ एक growlnotify द्विआधारी है देखो। इसे स्थापित करें, कुछ इस तरह से /usr/local/bin। तब आप इस कमांड का उपयोग कर सकते हैं

growlnotify --sticky --appIcon <icon> --message <message> -t <title>

पॉपअप दिखाने के लिए, जैसे:

बादल की गरज


2
मैं लगभग इस सटीक दृष्टिकोण का उपयोग करता हूं, लेकिन मैं प्रोगल के साथ ग्रोथ को बढ़ाता हूं ताकि ग्रोथ मेरे आईफोन में नोटिफिकेशन को आगे बढ़ा सके।
इयान सी

3
माउंटेन लायन का नोटिफिकेशन सेंटर ग्रोथ को अनावश्यक बनाता है ... इसके लिए इसका उपयोग करने के लिए मेरा उत्तर देखें ।
टॉम क्रॉकेट

16

मैक ओएस एक्स लायन 10.7 के रूप में, टर्मिनल में इस तरह के मुद्दों के साथ मदद करने के लिए कुछ नए स्टेटस संकेतक हैं:

टैब में:

  • गतिविधि: एक गतिविधि सूचक (कताई प्रगति संकेतक) तब प्रदर्शित किया जाता है जब टर्मिनल पर हाल ही में आउटपुट हुआ हो। यह आपको यह देखने में सक्षम करता है कि क्या यह वर्तमान में व्यस्त है या एक लंबी प्रक्रिया पूरी कर ली है। (या, ज़ाहिर है, आप इसका उपयोग यह बताने के लिए कर सकते हैं कि जब यह कुछ समय के लिए चुपचाप काम करने के बाद उत्पादन शुरू कर चुका है।)

  • अपठित: पृष्ठभूमि टैब में नए, अपठित पाठ को इंगित करने के लिए एक दीर्घवृत्त "..." प्रदर्शित होता है। जब आप टैब चुनते हैं, तो संकेतक साफ़ हो जाता है।

  • चेतावनी: यह दर्शाने के लिए "घंटी" प्रदर्शित की जाती है जब एक बीएल पृष्ठभूमि टैब या पृष्ठभूमि खिड़कियों के लिए लिखा गया है। इसके अलावा, टर्मिनल एप्लिकेशन आइकन पर एक लाल बैज प्रदर्शित करता है, जो सभी टर्मिनलों में "अपठित" अलर्ट / घंटी की संख्या को दर्शाता है। यदि टर्मिनल स्वयं पृष्ठभूमि में है, तो घंटी बजने पर यह अपने डॉक आइकन को भी उछाल देता है।

न्यूनतम विंडो डॉक आइकन में:

  • गतिविधि: गतिविधि को अग्रभूमि प्रक्रिया का नाम प्रदर्शित करके दर्शाया गया है।

  • अपठित: अपठित पाठ एक दीर्घवृत्त के साथ इंगित किया गया है।

  • मिनिमाइज़्ड टर्मिनल विंडो उनके डॉक आइकॉन में लाइव कंटेंट दिखाती है। इसका उपयोग यह देखने के लिए किया जा सकता है कि क्या गतिविधि है, या यहां तक ​​कि यह निर्धारित करने के लिए कि टर्मिनल क्या कर रहा है, यदि आप जिस आउटपुट की तलाश कर रहे हैं वह पहचानने योग्य है (उदाहरण के लिए, एक "शीर्ष" प्रदर्शन छोटे आकार में भी पहचानना काफी आसान है)। यह विशेष रूप से उपयोगी है जब डॉक आवर्धन चालू होता है या आपके पास एक बड़े डॉक के लिए जगह होती है।

इसके अलावा, आप अपना ध्यान आकर्षित करने के लिए टर्मिनल में कुछ प्रदर्शित कर सकते हैं (जो कि न्यूनतम खिड़कियों में भी दिखाई देगा)। उदाहरण के लिए:

  • एक बड़ा तारांकन चिह्न प्रदर्शित करें: banner \*

  • प्रदर्शन उल्टा करें: printf '\e[?5h'

  • प्रदर्शन लाल रंग: tput setab 1; tput clear

  • एक पाश में बैठो, स्क्रीन चमकती: while true; do printf '\e[?5h'; sleep 1; printf '\e[?5l'; sleep 1; done

खिड़कियों में हेरफेर करने के लिए भागने के कोड (चाल, सेट आकार, ज़ूम, न्यूनतम, आदि) भी हैं। आप उदाहरण के लिए, टर्मिनल विंडो को ज़ूम कर सकते हैं:

printf '\e[9;1t'

विवरण के लिए http://inv अदृश्य-island.net/xterm/ctlseqs/ctlseqs.html पर "विंडो हेरफेर" देखें।

एक अन्य दृष्टिकोण AppleScript का उपयोग एक अलग विंडो में अलर्ट प्रदर्शित करने के लिए है:

osascript -e 'tell app "System Events" to display alert "Build Completed" message "The checkout and build have completed."'

Tput का उत्कृष्ट उपयोग, और सीक्वेंस से बचना - आपको शीर्षक बार में स्क्रॉलिंग संदेश के अलावा सब कुछ मिल गया है!
bmike

12

मुझे पता है कि मुझे इस सवाल पर देर हो रही है लेकिन मुझे लगता है कि एक छोटा सा टुकड़ा है जो मददगार हो सकता है। मैंने पाया है, जबकि यह साफ-सुथरा है, आपके टर्मिनल की बात आपके साथ बिल्कुल कार्यात्मक नहीं है। क्या बेहतर है कुछ इस तरह अधिक सूक्ष्म है:

http://i.stack.imgur.com/FaZmF.png

जैसा कि क्रिस ने बताया है, जब बीईएल को फेंक दिया जाता है, तो लॉयन ने छोटे नोटिफिकेशन बैज जोड़े हैं। आप इसे अपने आप को कमांड के साथ फेंक सकते हैं:

tput bel

इसलिए, यदि आप पृष्ठभूमि में कुछ काम कर रहे हैं और एक अधिसूचना चाहते हैं जब यह पूरा हो जाए तो आप कुछ इस तरह की कोशिश कर सकते हैं:

ping -c 5 www.google.com && tput bel &

यह पिंग कमांड को एक बैकग्राउंड टास्क के रूप में चलाता है (हैंगिंग और इसे पूरा करता है) और इसे पूरा करने पर एक सिंपल अलर्ट फेंक दिया है। ऐतिहासिक रूप से बीईएल का उपयोग उस [भयानक] हार्डवेयर बीप को बनाने के लिए किया गया है, हालांकि लायन ने इसे "अमान्य कमांड" ध्वनि प्रभाव, एक अधिसूचना बैज और टर्मिनल आइकन को दो बार डॉकिंग में बदल दिया है।


1
printf '\a'के बराबर होगा tput bel। ध्यान दें कि टर्मिनल डॉक आइकन को बाउंस नहीं करता है अगर वह टैब जिसके कारण अलर्ट सक्रिय है।
लारी

5

मैं इस उत्तर में दो चीजें प्रस्तुत करता हूं:

  • अधिसूचना के लिए, afplayध्वनि फ़ाइलों का उपयोग करने का विकल्प ।
  • अधिसूचना के साथ निकास स्थिति की रिपोर्टिंग के लिए मेरे उपकरण ।

मेरे पास यह स्क्रिप्ट है ~/bin/donebeep:

#!/bin/bash
if [ "$@" = 0 ]; then
  afplay -v 2 /System/Library/Sounds/Blow.aiff &
else
  afplay -v 2 /System/Library/Sounds/Sosumi.aiff &
fi

यह तर्क अलग है कि क्या तर्क के आधार पर एक अलग ध्वनि खेलता है 0. तब मेरे पास एक उपनाम है:

alias donebeep='(savestatus=$?; ~/bin/donebeep $savestatus "$@"; exit $savestatus)'

(कि उनका एक ही नाम अप्रासंगिक है और शायद एक बुरा विचार है।)

अपने उदाहरण में इसके इस्तेमाल के लिये svn update . && ant clean build start; donebeep। ध्यान दें कि मैं ;इसके बजाय उपयोग कर रहा हूं &&, ताकि यह मुझे विफलता के साथ-साथ सफलता पर भी सूचित कर सके।

इससे पहले कि मैं सीखताafplay , मैं sayइसके बजाय संदेश बोलता था। donebeepइस स्क्रिप्ट द्वारा भूमिका निभाई गई थी:

#!/bin/bash
say -v Bruce "Done $(basename "$(pwd)"), $@." &

यह स्क्रिप्ट दो अलग संदेश रखने के बजाय सीधे निकास कोड बोलती है। इसमें वर्तमान निर्देशिका के नाम (यह स्पष्ट करने में सहायता के लिए कि कौन सा कार्य किया गया है), और उपनामों को पास करने के लिए अतिरिक्त पाठ कहा जा सकता है (इसीलिए उपनाम इसमें "$@"है)। अनुगामी पर ध्यान दें &ताकि आपको संकेत मिलने से पहले भाषण समाप्त होने की प्रतीक्षा करने की आवश्यकता न हो।


के लिए मैन पेजafplay अधूरा है; afplay -hसभी विकल्पों को सूचीबद्ध करता है:

Usage:
afplay [option...] audio_file

Options: (may appear before or after arguments)
  {-v | --volume} VOLUME
    set the volume for playback of the file
  {-h | --help}
    print help
  { --leaks}
    run leaks analysis  {-t | --time} TIME
    play for TIME seconds
  {-r | --rate} RATE
    play at playback rate
  {-q | --rQuality} QUALITY
    set the quality used for rate-scaled playback (default is 0 - low quality, 1 - high quality)
  {-d | --debug}
    debug print output

4

आप सूचना के लिए कमांड कमांड में भी निर्माण का उपयोग कर सकते हैं, उदाहरण के लिए: "चींटी: बिल्ड: किया।" देखें: आदमी टर्मिनल में कहता है



1

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

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

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

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

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

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

1

iTerm2 में सूचना प्राप्त करने के लिए एक अंतर्निहित तंत्र है लेकिन आपको शैल एकीकरण स्थापित करना होगा ।

जब आप एक लंबे समय से चल आदेश शुरू करते हैं, का चयन करें:
संपादित करें> मार्क्स और एनोटेशन> अलर्ट> चेतावनी अगले निशान पर ( ⌥Option+ ⌘Command+ A)

जब कमांड प्रॉम्प्ट वापस आता है, तो आप इसके बीच चयन कर सकते हैं:

  • मोडल अलर्ट बॉक्स दिखाएं
  • अधिसूचना (उदाहरण स्क्रीनशॉट)


0

उबंटू ने निम्नलिखित उपनामों को ~ / .bashrc में शिप किया:

alias alert='notify-send --urgency=low -i "$([ $? = 0 ] && echo terminal || echo error)" "$(history|tail -n1|sed -e '\''s/^\s*[0-9]\+\s*//;s/[;&|]\s*alert$//'\'')"'

इसके साथ, आप निम्न कार्य कर सकते हैं:

make; alert
sleep 10; alert

शायद notify-sendमैक OSX में एक बराबर है ? मैंने मैक और उबंटू दोनों में समान पॉपअप विंडोज देखी है।


आप Apple साइट पर हैं। इसका उत्तर देने के लिए, कृपया बताएं कि notify-sendमैक ओएस एक्स पर कैसे प्राप्त करें।
डैनियल बेक

4
मैं मानता हूं कि यह अनुचित है, लेकिन मुझे वास्तव में यह मददगार लगा। मैं Google से इस प्रश्न पर आया था, और मेरा मूल प्रश्न मैक-विशिष्ट नहीं था। मूल पोस्टर की तरह, मुझे लंबे समय तक चलने वाली कमांड चलाने पर अपने टर्मिनल की निगरानी नहीं करने का एक तरीका चाहिए; मैं सिर्फ उबंटू का उपयोग कर रहा हूँ: /
allyourcode

0

ध्वनियों और मोडल खिड़कियों के साथ मेरी समस्या यह है कि मैं नहीं बता सकता कि वे कहाँ से आते हैं। मैं वर्तमान में रिक्त स्थान के एक झुंड के साथ काम करता हूं, और कभी-कभी 20 टर्मिनल खिड़कियों के ऊपर।

मेरा समाधान यूनिक्स पक्ष के लिए पोर्टेबल है, और किसी भी चीज के साथ काम करना चाहिए जो एनी एस्केप सीक्वेंस का समर्थन करता है। यह समाधान स्नो लेपर्ड के साथ काम करता है, और संभवतः टर्मिनल के अधिक प्राचीन संस्करणों के साथ काम करेगा।

सिंगल लाइन इन .bash_profile

function watch { $* ; echo -n -e "\033[41m" ;  echo $* DONE ;  date ;  echo -n -e "\033[0m" ; }

इसे तोड़कर:

$* expands to the original command I want to watch.
first escape sequence changes background color to red
echo repeats the command (with red background, the word DONE.
Running Date tells you when it finished.
last escape resets the terminal to what it was.

यदि आपको लाल रंग पसंद नहीं है, तो Google ascii एस्केप कोड बैकग्राउंड कलर। ध्यान दें कि यह पूरी स्क्रीन लाल नहीं बदलता है, लेकिन कमांड समाप्त होने के बाद कुछ भी आउटपुट।


0

मैंने इसे हल करने के लिए एक स्क्रिप्ट बनाई जो यहां है । इसके लिए आपको किसी अतिरिक्त सॉफ्टवेयर की आवश्यकता नहीं है। स्थापना:
brew install akashaggarwal7/tools/tsay
उपयोग:
sleep 5; tsay

योगदान करने के लिए स्वतंत्र महसूस करो!


पतन का कारण?
आकाश अग्रवाल

0

यहां मेरा बैश फ़ंक्शन है (बस इसे अपने ~/.bashrcया कहीं भी रखें ~/.zshrc:

watch(){
  cmd=$@ # Somehow interpolate $@ directly doesn't work.
  $@ && say 'Watch Completed!' && osascript -e "display notification \"Completed: $cmd\" with title \"Watch Alert\""
}

इसके प्रयेाग के लिए: watch echo 'hi there'

आप यहाँ प्रलेखित अधिसूचना ध्वनि को भी अनुकूलित कर सकते हैं: https://apple.stackexchange.com/a/115373/9622


0

मैं हर समय उस तरह का काम करता हूं। मेरी कमांड लाइन दिख सकती है

$ rm Gemfile.lock && bin/setup && bundle install --binstubs && say "All"; say "done"

यदि bin/setupऔर bundle installकमांड सफलतापूर्वक पूरा हो जाता है, तो मैं सिस्टम / डिक्टेशन की आवाज "ऑल आउट" सुनूंगा। यदि पहले दोनों में से कोई एक त्रुटि है, तो &&श्रृंखला का पालन नहीं किया जाएगा, और मैं सुनूंगा "डन"।


0

आप osascriptApple स्क्रिप्ट चलाने के लिए अंतर्निहित कमांड का उपयोग कर सकते हैं जो एक अधिसूचना दिखाता है, जैसे

osascript -e 'display notification "Command done" with title "Your title here"'

आप इसे एक साधारण अर्धविराम के साथ जोड़ सकते हैं, जैसे

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