क्या केवल एक स्क्रिप्ट प्रदर्शित करने का एक तरीका है, जबकि मेरी स्क्रिप्ट चल रही है?


10

मैं स्क्रिप्टिंग के लिए बहुत नया हूं। यहाँ सरल स्क्रिप्ट है (जो काम करती है) जो मैंने लिखी है, जो 5 मिनट बीतने पर एक छवि प्रदर्शित करती है:

sleep 300 && firefox file:///home/tasks/fiveminutes.jpg

यहाँ मेरा सवाल है: कभी-कभी मुझे याद नहीं रहता कि मैंने टाइमर शुरू किया है या नहीं। क्या कोई पाठ या आइकन संकेत जोड़ने का एक तरीका है (आदर्श रूप से टास्कबार पर, लेकिन कहीं भी महान होगा) जो 5 मिनट के लिए प्रकट होता है (पल से मैं टाइमर को उस क्षण तक शुरू करता हूं जहां मैं इसे समाप्त करता हूं)?

किसी भी सुझाव के लिए बहुत बहुत धन्यवाद।


1
डेस्कटॉप कार्यों को संभालने के लिए बैश सबसे अच्छा तरीका नहीं है। आप ज़ेनिटी या याड को देख सकते हैं, लेकिन वे नींद समारोह के साथ उस महान काम नहीं करते हैं। यदि आप पायथन का उपयोग करने पर विचार करेंगे, तो यह एक बहुत ही सरल स्क्रिप्ट होगी जो GTK / wx सिस्टम ट्रे आइकन का उपयोग कर सकती है।
डोरियन

जिनेटी के साथ अधिक जटिल बैश समाधान के लिए, आप इस कोड पर एक नज़र डाल सकते हैं: github.com/john-davies/shellpomo/blob/master/shellpomo
डोरियन

हाय डोरियन - आपके सुझावों के लिए बहुत बहुत धन्यवाद। मुझे पायथन का उपयोग करने में खुशी होगी, क्या आप मुझे GTK / wx सिस्टम ट्रे आइकन के लिए कैसे-कैसे की ओर इशारा कर सकते हैं?
साधु।

जवाबों:


4

प्रक्रिया शुरू होने पर आप एक पॉप-अप अधिसूचना प्रदर्शित कर सकते हैं। बस अपनी स्क्रिप्ट को बदल दें

notify-send "Your image will arrive" "after 5 minutes" && sleep 300 && firefox file:///home/tasks/fiveminutes.jpg

आप अधिसूचना बबल की अवधि -tको notify-sendकमांड के साथ पैरामीटर (और मिलीसेकंड में समय) के साथ सेट कर सकते हैं, उदाहरण के लिए 5 मिनट के उपयोग के लिए अवधि निर्धारित करने के लिए

notify-send -t 300000 "heading" "text"

लेकिन इस पैरामीटर अपने डेस्कटॉप पर्यावरण के आधार पर पूरी तरह से नजरअंदाज किया जा सकता है (देखें इस )।


हाय पॉम्स्की, आपके सुझाव के लिए धन्यवाद। मैं जिस चीज की तलाश कर रहा हूं, वह ऐसी चीज है जो पूरे 5 मिनट तक स्क्रीन पर रहती है।
साधु।

1
@साधू। अधिसूचना बबल के लिए टाइमआउट सेट करने का एक तरीका है (उत्तर को संपादित करें देखें), लेकिन दुर्भाग्य से यह कुछ डेस्कटॉप वातावरणों में काम नहीं कर सकता है।
पोम्स्की

हाय पोम्स्की - सूचित-भेजें-टी समाधान एक सपने की तरह काम करता है। तुम्हारी मदद के लिए शुक्रिया।
साधु।

6

यह स्क्रिप्ट के लिए पर्याप्त है जैसे:

#!/usr/bin/env bash

while true
do
    if pgrep -f gedit > /dev/null
    then

       printf "\r%b" "\033[2K"
       printf "Script is running"
    else
       printf "\r%b" "\033[2K" 
       printf "Script is not running."
    fi
    sleep 0.25
done

यह एक बहुत ही विशिष्ट तरीका है और अक्सर शेल स्क्रिप्ट में उपयोग किया जाता है। यह क्या करता है, लगातार चल रहा है, और एक सेकंड के प्रत्येक तिमाही यह जांचता है कि क्या आपकी स्क्रिप्ट के माध्यम से चल रहा है pgrep -fif..fiशेल स्क्रिप्ट में बयान कमांड के निकास की स्थिति पर काम करते हैं, इसलिए pgrep -fसफल निकास स्थिति लौटने का मतलब है कि यह आपकी स्क्रिप्ट की प्रक्रिया को मिला और यह चल रहा है। अन्यथा, हम अन्य विवरण पर जाते हैं।

दोनों ही मामलों में हम टेक्स्ट की एक लाइन प्रिंट करते हैं जो उपयोगकर्ता को बताती है कि यह चल रहा है या नहीं। printf "\r%b" "\033[2K"लाइन क्लीयर करने के लिए एक एस्केप सीक्वेंस को प्रिंट करने के लिए भी जोड़ा गया है (सिर्फ क्लीनर आउटपुट के लिए)।

वहां से, आकाश की सीमा है। आप उस टेक्स्ट को पाइप के माध्यम से टर्मिनल में किसी अन्य प्रक्रिया में पास कर सकते हैं या आप आउटपुट स्क्रिप्ट को मॉनिटरिंग स्क्रिप्ट से इंडिकेटर-सिस्मोइनिटर तक भेज सकते हैं , जो इंडिकेटर में कस्टम जानकारी प्रदर्शित करने की अनुमति देता है। इसके माध्यम से स्थापित किया जा सकता है

sudo add-apt-repository ppa:fossfreedom/indicator-sysmonitor
sudo apt-get update
sudo apt-get install indicator-sysmonitor

उसके बाद बस एक कस्टम कमांड प्रदर्शित करने के लिए संकेतक को कॉन्फ़िगर करें जो निगरानी स्क्रिप्ट होगी। कस्टम कमांड को कॉन्फ़िगर करने का उदाहरण यहां पाया जा सकता है

बेशक, कोई पायथन में अपना खुद का संकेतक लिख सकता है, लेकिन यह सिर्फ एक ओवरकिल हो सकता है जब उसके लिए पहले से ही एक उपकरण हो।


1
indicator-sysmonitorउपयोगी लगता है, मुझे यह कोशिश करनी चाहिए।
पा ४० 26०

6

इस उत्तर और इंटरनेट पर एक अतिरिक्त शोध के आधार पर यहां पाइथन लॉन्चर है, जो उबंटू 16.04 में अच्छा काम करता है:

#!/usr/bin/env python3
import signal
import gi
import os
import subprocess
import sys
gi.require_version('Gtk', '3.0')
gi.require_version('AppIndicator3', '0.1')
from gi.repository import Gtk, AppIndicator3, GObject
import time
from threading import Thread

# Execute the script
script = os.path.basename(sys.argv[1])
subprocess.Popen(sys.argv[1:])
script_name = script.rsplit('/', 1)[-1]

class Indicator():
    def __init__(self):
        self.app = 'Script indicator'
        iconpath = "/usr/share/unity/icons/launcher_bfb.png"

        self.indicator = AppIndicator3.Indicator.new(
            self.app, iconpath,
            AppIndicator3.IndicatorCategory.OTHER)
        self.indicator.set_status(AppIndicator3.IndicatorStatus.ACTIVE)
        self.indicator.set_menu(self.create_menu())
        self.indicator.set_label("Script Indicator", self.app)
        # the thread:
        self.update = Thread(target=self.show_seconds)
        # daemonize the thread to make the indicator stopable
        self.update.setDaemon(True)
        self.update.start()

    def create_menu(self):
        menu = Gtk.Menu()
        # menu item 1
        item_quit = Gtk.MenuItem('Quit')
        item_quit.connect('activate', self.stop)
        menu.append(item_quit)

        menu.show_all()
        return menu

    def show_seconds(self):
        global script_name
        t = 0
        process = subprocess.call(['pgrep', script_name], stdout=subprocess.PIPE)
        while (process == 0):
            t += 1
            GObject.idle_add(
                self.indicator.set_label,
                script_name + ' ' + str(t) + 's', self.app,
                priority=GObject.PRIORITY_DEFAULT
                )
            time.sleep(1)
            process = subprocess.call(['pgrep', script_name], stdout=subprocess.PIPE)

        subprocess.call(['notify-send', script_name + ' ended in ' + str(t) + 's'])
        time.sleep(10)
        Gtk.main_quit()

    def stop(self, source):
        global script_name
        subprocess.call(['pkill', script_name], stdout=subprocess.PIPE)
        Gtk.main_quit()

Indicator()
# this is where we call GObject.threads_init()
GObject.threads_init()
signal.signal(signal.SIGINT, signal.SIG_DFL)
Gtk.main()
  • यदि आपको स्क्रिप्ट में सुधार करने का कोई तरीका दिखाई देता है, तो कृपया उत्तर को संपादित करने में संकोच न करें। मुझे पायथन के साथ ज्यादा अनुभव नहीं है।

निष्पादन योग्य फ़ाइल बनाएं और उपरोक्त पंक्तियों को उसकी सामग्री के रूप में रखें। मान लें कि फ़ाइल कहा जाता है script-indicator.py। अपनी आवश्यकताओं और अपनी स्क्रिप्ट प्रकृति के आधार पर, आप निम्न तरीकों में से एक में इस लांचर का उपयोग कर सकते हैं:

./script-indicator.py /path/to/script.sh
./script-indicator.py /path/to/script.sh &
./script-indicator.py /path/to/script.sh > out.log &
./script-indicator.py /path/to/script.sh > /dev/null &
  • आप कहां script.shसंकेत करना चाहते हैं।

script.shसमाप्त होने पर बस स्क्रीनशॉट बनाया गया:

यहाँ छवि विवरण दर्ज करें

  • एनिमेटेड डेमो देखने के लिए चित्र पर क्लिक करें।

वैकल्पिक रूप से आप स्क्रिप्ट /usr/local/binको शेल कमांड सिस्टम के रूप में सुलभ होने के लिए रख सकते हैं । आप इसे इस समर्पित GitHub Gist से डाउनलोड कर सकते हैं :

sudo wget -qO /usr/local/bin/script-indicator https://gist.githubusercontent.com/pa4080/4e498881035e2b5062278b8c52252dc1/raw/c828e1becc8fdf49bf9237c32b6524b016948fe8/script-indicator.py
sudo chmod +x /usr/local/bin/script-indicator

मैंने इसे निम्नलिखित सिंटैक्स के साथ परीक्षण किया है:

script-indicator /path/to/script.sh
script-indicator /path/to/script.sh &
script-indicator /path/to/script.sh > output.log
script-indicator /path/to/script.sh > output.log &
script-indicator /path/to/script.sh > /dev/null
script-indicator /path/to/script.sh > /dev/null &
nohup script-indicator /path/to/script.sh >/dev/null 2>&1 &
# etc...

2
बहुत बढ़िया ! पहले से ही उखाड़ी गई
सेर्गेई कोलोडियाज़नी

4

साथ में osd_cat

आप पैकेज osd_catसे उपयोग कर सकते हैं xosd-bin Xosd- बिन स्थापित करें, उदाहरण के लिए:

<<<"runs" osd_cat -d5 -i20 -o50 -f"-*-*-*-*-*-*-100-*-*-*-*-*-*-*" && firefox

यह स्क्रीन पर स्थिति के 100लिए फ़ॉन्ट आकार के साथ "रन" प्रदर्शित करता है और यह तैयार होने पर शुरू होता है - आपको इस दृष्टिकोण की आवश्यकता नहीं है । आप विकल्प के लिए एक्स लॉजिकल फॉन्ट डेसिस्क्रिप्ट (यह अजीब बात) प्राप्त करने के लिए उपयोग कर सकते हैं , उदाहरण के लिए यदि आप एक अलग फ़ॉन्ट का उपयोग करना चाहते हैं। अधिक विकल्पों के लिए पढ़ें ।520,50firefoxsleepxfontsel-*-*-…-fman osd_cat

साथ में yad

आप yad याड स्थापित करेंनिम्नानुसार उपयोग कर सकते हैं :

yad --title=runs --text="it’s running!" --timeout=5 --button=Fire:1 --button=Abort:0 || firefox

इसका यह लाभ है कि आप कमांड को निरस्त कर सकते हैं या इसे तुरंत निष्पादित कर सकते हैं, यदि आप कुछ नहीं करते हैं तो 5इस उदाहरण में सेकंड के बाद बंद हो जाएगा ।


हाय मिठाई - आपके सुझाव के लिए धन्यवाद। मैं जिस चीज की तलाश कर रहा हूं, वह ऐसी चीज है जो पूरे 5 मिनट तक स्क्रीन पर रहती है।
साधु।

@साधू। दोनों ऐसा करते हैं, yadखिड़की को छोटा किया जा सकता है, ओएसडी पाठ नहीं कर सकता।
मिठाई

@साधू। मैंने दोनों प्रस्तावित समाधानों का परीक्षण किया है और वे बहुत अच्छे काम करते हैं।
पा ४० 26०

0

आप इसे पहले से काम करने वाली स्क्रिप्टmulti-timer ले सकते हैं और एक सामान्य काउंट-डाउन टाइमर के लिए इसे बाहर निकाल सकते हैं :

कताई पिज्जा

यह indicator-sysmonitorसर्ज के उत्तर में वर्णित समान का उपयोग करता है ।

सिस्ट्रे भाग Brightness: 2344को भी उसी लिपि द्वारा प्रदर्शित किया जाता है।

अगर नए कोड उपयोगकर्ताओं के लिए अनावश्यक भागों को अलग करना बहुत मुश्किल है, तो मुझे यहां एक स्क्रिप्ट पोस्ट करने में खुशी होगी, जिसे show-sleepआवश्यक सीमित कार्यक्षमता के साथ कहा जाता है। बस नीचे एक टिप्पणी पोस्ट करें।

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