विशिष्ट आदेशों के लिए एक कस्टम स्वत: पूर्ण कैसे निर्दिष्ट करें?


25

क्या बैश होने का एक तरीका है जब आप डबल टैब के बारे में जानते हैं कि वास्तव में क्या प्रदर्शित करना है? उदाहरण के लिए मेरे पास एक पायथन लिपि है scpyजिसमें युगल तर्कों की आवश्यकता होती है। उदाहरण के लिए apt-get, यदि आप डबल टैब आपको देते हैं

ऑटोकैलियन बिल्ड-डिप क्लीन डीसेलेक्ट-अपग्रेड पर्ज सोर्स अपग्रेड
ऑटोरेमोव डिस्ट-अपग्रेड इंस्टाल रिमूव अपडेट को चेक करें  

क्या ऐसा करने का कोई तरीका है जो आपकी स्वयं की लिपियों / कार्यक्रमों के लिए है? क्या मुझे अपने पायथन स्क्रिप्ट को बैश स्क्रिप्ट में लपेटने की आवश्यकता है?

जवाबों:


31

ऐसा करने का सबसे आसान तरीका एक शेल स्क्रिप्ट को शामिल करना है /etc/bash_completion.d/। इस फ़ाइल की मूल संरचना एक साधारण कार्य है जो पूर्णता का कार्य करता है और फिर आह्वान करता है completeजो बैश बिलिन है। उपयोग करने के तरीके के बारे में विस्तार से जाने के बजाय complete, मेरा सुझाव है कि आप बैश कम्पलीशन का एक परिचय पढ़ें । भाग 1 में मूल बातें सम्‍मिलित हैं और भाग 2 इस बारे में है कि आप एक पूर्ण पटकथा लिखने के बारे में कैसे जाएंगे।

बैश समापन का एक सघन विवरण "प्रोग्रामेबल कम्पलीशन" के सेक्शन में पाया जा सकता है man bash(आप टाइप कर सकते हैं "/ प्रोग्रामेबल कंप्लीशन" और फिर जल्दी से वहां पहुंचने के लिए 'एन' को कुछ बार दबाएं। या, यदि आप भाग्य महसूस कर रहे हैं, तो जी) 2140 RETURN ")।


8

यहाँ मूल मार्गदर्शक है।

आओ हमारे पास स्क्रिप्ट का एक उदाहरण है, जिसे admin.sh कहा जाता है, जिसमें आप स्वतः पूर्ण कार्य करना चाहते हैं।

#!/bin/bash

while [ $# -gt 0 ]; do
  arg=$1
  case $arg in
    option_1)
     # do_option_1
    ;;
    option_2)
     # do_option_1
    ;;
    shortlist)
      echo option_1 option_2 shortlist
    ;;
    *)
     echo Wrong option
    ;;
  esac
  shift
done

नोट विकल्प शॉर्टलिस्ट। इस विकल्प के साथ स्क्रिप्ट को कॉल करना इस स्क्रिप्ट के सभी संभावित विकल्पों को प्रिंट करेगा।

और यहाँ आपके पास स्वतः पूर्ण स्क्रिप्ट है:

_script()
{
  _script_commands=$(/path/to/your/script.sh shortlist)

  local cur prev
  COMPREPLY=()
  cur="${COMP_WORDS[COMP_CWORD]}"
  COMPREPLY=( $(compgen -W "${_script_commands}" -- ${cur}) )

  return 0
}
complete -o nospace -F _script ./admin.sh

ध्यान दें कि पूरा करने के लिए अंतिम तर्क उस स्क्रिप्ट का नाम है जिसे आप स्वतः पूर्ण करना चाहते हैं। आपको बस इतना करने की ज़रूरत है कि आप अपनी स्वतः पूर्ण स्क्रिप्ट को bashrc में जोड़ दें

source /path/to/your/autocomplete.sh

या इसे /etc/bash.completion.d पर कॉपी करें

स्रोत: /ubuntu//a/483149/24155


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