_Expand क्या करता है?


12

मैं शेल के साथ काम कर रहा था, और गलती से मैंने tabलिखने के बाद अपने आप को जोड़ लिया _e, जिसके परिणामस्वरूप _expand

यह आदेश क्या करता है? मुझे ऑनलाइन स्पष्टीकरण नहीं मिला, केवल वही प्रश्न जो मैं यहाँ पूछ सकता हूँ, उबंटू में थे:

लेकिन वे मेरे सवाल का जवाब नहीं देते। इसके बजाय, वे की तरह आदेशों के बारे में एक ही तरह के अधिक प्रश्नों को खोलने _complete, _complete_as_rootआदि

जवाबों:


14

_expandटाइप करने पर आप पता लगा सकते हैं कि क्या करता है

$ type _expand
_expand is a function
_expand ()
{
    if [[ "$cur" == \~*/* ]]; then
        eval cur=$cur;
    else
        if [[ "$cur" == \~* ]]; then
            cur=${cur#\~};
            COMPREPLY=($( compgen -P '~' -u "$cur" ));
            [ ${#COMPREPLY[@]} -eq 1 ] && eval COMPREPLY[0]=${COMPREPLY[0]};
            return ${#COMPREPLY[@]};
        fi;
    fi
}

यह बैश समापन तंत्र में एक कार्य है। यह पैथनाम में टिल्ड ( ~) का विस्तार करता है । में /etc/bash_completionसमारोह के बारे में एक टिप्पणी है:

# Expand ~username type directory specifications.  We want to expand
# ~foo/... to /home/foo/... to avoid problems when $cur starting with
# a tilde is fed to commands and ending up quoted instead of expanded.

इसे टर्मिनल में आज़माएं, टाइप करें:

~<tab><tab>

उदाहरण के लिए, यह उपयोगकर्ता नाम में विस्तारित होगा

~usera     ~userb     ~userc

1
धन्यवाद, मैं कमांड नहीं जानता था type। यह मेरे लिए स्पष्ट नहीं था कि मैं इन कार्यों को क्यों नहीं कह सकता _function_name [argument], लेकिन अब मैं समझता हूं कि वे अपने उद्देश्य को स्वत: पूर्ण एक्सटेंशन के रूप में परोसते हैं, और यह तथ्य कि वे मेरे स्वत: पूर्ण में दिखाई देते हैं, केवल इसलिए कि वे घोषित किए जाते हैं (लेकिन वे अभिप्रेत नहीं हैं सीधे कहा जाए)।
scristalli

3
वास्तव में _expandसमारोह, अन्य सभी पूर्ण कार्यों के रूप में, बस manipulates COMPREPLYसरणी, के मूल्यों पर आधारित $curहै जो पूरा होने के पैटर्न में शामिल है।
अराजकता
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.