खोज…


परिचय

बैश में कुछ सामान्य डिजाइन पैटर्न को पूरा करें

प्रकाशित / सदस्यता (पब / उप) पैटर्न

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

pubsub.sh:

    #!/usr/bin/env bash

    #
    # Save the path to this script's directory in a global env variable
    #
    DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"

    #
    # Array that will contain all registered events
    #
    EVENTS=()

    function action1() {
        echo "Action #1 was performed ${2}"
    }

    function action2() {
        echo "Action #2 was performed"
    }

    #
    # @desc   :: Registers an event
    # @param  :: string $1 - The name of the event. Basically an alias for a function name
    # @param  :: string $2 - The name of the function to be called
    # @param  :: string $3 - Full path to script that includes the function being called
    #
    function subscribe() {
        EVENTS+=("${1};${2};${3}")
    }

    #
    # @desc   :: Public an event
    # @param  :: string $1 - The name of the event being published
    #
    function publish() {
        for event in ${EVENTS[@]}; do
            local IFS=";"
            read -r -a event <<< "$event"
            if [[  "${event[0]}" ==  "${1}" ]]; then
                ${event[1]} "$@"
            fi
        done
    }

    #
    # Register our events and the functions that handle them
    #
    subscribe "/do/work"           "action1" "${DIR}"
    subscribe "/do/more/work"      "action2" "${DIR}"
    subscribe "/do/even/more/work" "action1" "${DIR}"

    #
    # Execute our events
    #
    publish "/do/work"
    publish "/do/more/work"
    publish "/do/even/more/work" "again"

Daud:

chmod +x pubsub.sh
./pubsub.sh


Modified text is an extract of the original Stack Overflow Documentation
के तहत लाइसेंस प्राप्त है CC BY-SA 3.0
से संबद्ध नहीं है Stack Overflow