2011-04-21 12 views
5

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

backy long-running-script param1 param2 

समस्या अब मैं ढीला कि long-running-script के लिए बैश पूरा होने अगर मैं एक और स्क्रिप्ट पहले जोड़ें है।

मैं एक बैश समापन फ़ाइल लिखना चाहता हूं जो न केवल long-running-script और इसके सभी पैरामीटर के लिए बैश पूर्णता को संरक्षित करता है, जो कि मैं अन्य सभी स्क्रिप्ट के लिए भी बैक के साथ कॉल करना चाहता हूं।

मुझे बैश पूर्ण होने के साथ कुछ अनुभव है, लेकिन मुझे बस उस आदेश को याद आ रहा है जिसे मैं अपनी बैश पूर्णता स्क्रिप्ट में सम्मिलित कर सकता हूं ताकि यह स्क्रिप्ट को पूरा करने के साथ पूरा हो सके। कोई विचार?

मेरे पूरा होने के अब तक:

have backy && 
_backy_complete() 
{ 
    local cur prev goals 

    COMPREPLY=() 
    cur=${COMP_WORDS[COMP_CWORD]} 

    # How to get the completion from the script that is the param for backy, 
    # in a generic way? 
    COMPREPLY=(?????) 
    return 0 
} && 
complete -F _backy_complete backy 

संपादित करें - समाधान:

complete -F _command backy 
:

Lekensteyn के लिए धन्यवाद, मैं सिर्फ इस लाइन के साथ अपने मौजूदा बैश पूरा होने स्क्रिप्ट की सामग्री की जगह

+0

आपको अपने प्रश्न का समाधान जोड़ने की ज़रूरत नहीं है, क्योंकि यह सीधे प्रश्न के उत्तर में दिखाई देता है। – Lekensteyn

उत्तर

4

ऐसे मामलों के लिए पहले से ही एक bash_completion फ़ंक्शन है:

complete -F _command backy 

इसका उपयोग sudo, fakeroot और अन्य के बाद आदेशों को स्वत: पूर्ण करने के लिए किया जाता है। बैक को पास किए गए किसी भी तर्क को अनदेखा किया जाता है:

backy --whatever --this --is=ignored not ignored anymore 
संबंधित मुद्दे