शेल टास्क कम्पलीशन के लिए ग्रोथ नोटिफिकेशन


12

(OSX विशिष्ट)

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

मेरी आदर्श दुनिया में, यह इस तरह से काम करेगा: "यदि टर्मिनल में एक टैब से बाहर निकलने की प्रक्रिया अभी जारी है, तो एक ग्रिप नोटिफिकेशन पोस्ट करें।"

किसी और को इस सेट की तरह कुछ है?


1
ध्यान दें कि अगर आप अभी भी स्क्रीन पर बैठे हैं, तो ग्रोएल आपको सूचित करेगा। लंबे कार्यक्रमों के लिए, "संकेत" कमांड का उपयोग ऑडियो संकेत प्राप्त करने के लिए करें कि यह समाप्त हो गया है।

@ मांकॉफ़: ऑडियो अधिसूचना ध्वनि शामिल करने के लिए आप growlnotifyएप्लिकेशन अधिसूचना सेटिंग्स कॉन्फ़िगर कर सकते Growl.prefPaneहैं। यह, हालांकि, आपके द्वारा निष्पादित कमांड के आधार पर परिवर्तनशील नहीं है, जैसे sayकि होगा। लेकिन यह कम डरावना है।
डैनियल बेक

जवाबों:


11

आप इसे करने के लिए Growlnotify स्थापित कर सकते हैं ।

$ ./some_program && growlnotify Title -m Message

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


अपने उपयोग के मामले के लिए बढ़ने के उपयोग को सरल बनाने के लिए, ~/bash_profileनिम्नलिखित को संपादित करें और जोड़ें:

function long {
    $@
    /usr/local/bin/growlnotify Finished -m 'Done'
}

अब आप बस long your_command(समान sudo) कर सकते हैं । Ctrl-Aयदि आप (मेरे जैसे) हमेशा वास्तविक कमांड टाइप करते हैं, तो लाइन की शुरुआत में कर्सर रखें और बाद में उपसर्ग जोड़ने की जरूरत है।

मेरा बैश-फू दुर्भाग्य से अपर्याप्त है जो growlnotifyसंदेश में कमांड जोड़ने में सक्षम है


इस उत्तर के लिए प्रति @ mankoff की टिप्पणी:

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

function gn {
    /usr/local/bin/growlnotify Finished -m "$@"
}

के रूप में उपयोग करें gn svn


2
कमांड से पहले आपको इसके बारे में सोचने की जरूरत नहीं है। यदि, यह चल रहा है, तो आप महसूस करते हैं कि यह किए जाने पर आपको सूचित किया जाना है, बस "gn foo" टाइप करें (या "कहो", ऑडियो संकेत के लिए), एंटर दबाएं, और वह कमांड तब चलेगा जब चालू एक खत्म हो जाएगा। ।

पुन: आप इसे स्वचालित रूप से करने पर टिप्पणी करते हैं ... टाइमस्टैम्प को छूने के लिए PS1 या कुछ का उपयोग करें। PS1 का उपयोग यह सत्यापित करने के लिए करें कि PS1 ने कितने समय तक इसे छुआ है। यदि यह> n सेकंड हो गया है, तो ग्रोनलोटिफ़िज़ चलाएं। अब यह कष्टप्रद नहीं है क्योंकि यह हर आज्ञा के लिए नहीं होता है।

@ मांकॉफ सच। तो टाइपिंग कम करने का एक सरल कार्य पर्याप्त है।
डैनियल बेक

@ मांकॉफ़ PS2? क्या यह सिर्फ निरंतरता का संकेत नहीं है? यह हर उत्पादन लाइन उपसर्ग नहीं करता है ..?
डैनियल बेक

PS1 / PS2 स्थानों के रूप में अनुमान लगाया गया था कि अगर मैं इसे लागू करना चाहता था तो मैं देखना शुरू कर दूंगा। शायद पूरी बात सिर्फ पीएस 1 में एम्बेड की जा सकती है। और शायद जेनेरिक ग्रोनल-फॉर-हर-कमांड सेटअप बनाने के लिए पूरी तरह से अलग तरीके हैं।

2

क्या आप की जरूरत है growlnotifyजो बढ़ने की सूचनाओं को ट्रिगर करने के लिए एक CLI कार्यक्रम है। आप इसका उपयोग कर सकते हैं:

./script.sh;; growlnotify -m "done"

यह कुछ और knobs है जिसे आप growlnotify -hअधिक जानकारी के लिए उपयोग कर सकते हैं


धन्यवाद। मैंने उसी समय टिप्पणी की जब मैंने वह पाया। अर्धविराम के रूप में अच्छी तरह से && से अधिक समझ में आता है।
ezrock

1
@ezrock मैं समझ एक इस्तेमाल कर सकते हैं &&और ||सफलता और विफलता के राज्यों के बीच अलग-अलग संदेशों के लिए है, लेकिन अगर एक ही संदेश में रुचि है दिखाया जा रहा कमांड निष्पादित करने के बाद, तो ;;सरल है। =)
19

2

यदि आप इस मामूली बदलाव को करते हैं तो डैनियल बेक का जवाब है कि यह बहुत अच्छा है।

function long {
    command=$@
    $command
    /usr/local/bin/growlnotify Finished -m "$command completed."
}

फिर जब आप 'long svn up' चलाते हैं तो आपको संदेश दिखाई देगा 'svn up complete'।

बहुत अच्छा है अगर आप एक ही समय में कई बार शेल स्क्रिप्ट का सेवन करते हैं।


2

अब जब OSX 10.8 और बाद में मूल सूचनाएं हैं, तो यह है कि मैं टर्मिनल-नोटिफ़ायर के माध्यम से एक ही लक्ष्य कैसे पूरा करता हूं :

  1. काढ़ा स्थापित करें
  2. $ brew install terminal-notifier
  3. इसे इसमें जोड़ें ~/.bash_profile:

    function gn {
        terminal-notifier  -message ' ' -title 'Finished'
    }
    

सुनिश्चित करें कि आपने अपनी प्रोफ़ाइल को . ~/.bash_profileभविष्य के टर्मिनल सत्रों के लिए आवश्यक नहीं बनाया है, क्योंकि सत्र बनाते समय आपकी प्रोफ़ाइल स्वचालित रूप से सुरक्षित है।

फ़ंक्शन कॉल के बाद अपने पसंदीदा कमांड के साथ टेस्ट करें।

ls ; gn

टर्मिनल-नोटिफ़ायर के तर्क कुछ सुधार कर सकते हैं, लेकिन फ़ंक्शन को पास करने के लिए पिछले कमांड को हथियाने का एक त्वरित प्रयास सफल नहीं था और मुझे वह सभी कार्यक्षमता मिलती है जिनकी मुझे आवश्यकता है। अर्थात्, ;gnकिसी भी लंबी चलने वाली प्रक्रिया के अंत में एक अधिसूचना पाने के लिए।



1

यह "लॉन्ग रनिंग" प्रक्रियाओं के लिए स्वचालित रूप से आह्वान करने का एक तरीका है: http://hints.macworld.com/article.php?story=20071009124425468

यह हुक $PROMPT_COMMANDकरता है और प्रक्रियाओं को पूरा करने में 10 सेकंड से अधिक समय पूरा करने को सूचित करता है। आपको इसे अपने स्वयं के वातावरण और वर्कफ़्लो के अनुरूप बनाने की आवश्यकता हो सकती है (उदाहरण के लिए, lessया संपादक के आह्वान को पूरा करने की अनदेखी ), लेकिन यह उचित रूप से अच्छी तरह से काम करता है।


मैंने खुद इसकी कोशिश नहीं की है, लेकिन पूरी तरह से स्वचालित दृष्टिकोण वास्तव में आकर्षक लगता है। यहां अन्य सभी समाधानों को पहले से जानने की आवश्यकता है कि कमांड लंबे समय तक चलेगी और स्क्रिप्ट को ट्रिगर करने के लिए याद रखेगी (यानी; ls; Growlnotify)। मुझे इसे मैन्युअल रूप से ट्रिगर करने की आवश्यकता नहीं है।
ezrock

0

मैंने बस कुछ और चारों ओर पोज किया और इसके लिए एक सरल तरीका ढूंढा। यह थोड़ा अधिक मैनुअल है जितना मैं चाहूंगा, लेकिन यहां जाता है।

  1. Growlnotify को इंस्‍टॉल करें (यह Growl की इंस्‍टॉल डाउनलोड के एक्‍सट्रा फोल्‍डर में है) 1।
  2. && growlnotify -m "Message"लंबी प्रक्रिया के लिए < > जोड़ें ।

वह मेरे लिए अभी काम करता है, लेकिन मैं बेहतर कर सकता हूं, मेथिंक।


0

OSX 10.9+ कोई तृतीय-पक्ष सॉफ़्टवेयर के साथ समाधान:

OSX 10.9 और इसके बाद के संस्करण में, आप display notificationटर्मिनल से ग्रोएल प्रदर्शित करने के लिए AppleScript कमांड का उपयोग कर सकते हैं :

osascript -e 'display notification with title "Process Completed."'

यदि आप हर बार वह सब टाइप नहीं करना चाहते हैं, तो आप एक का उपयोग कर सकते हैं alias:

alias growl='osascript -e "display notification with title \"Process Completed.\""'

उदाहरण:

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