_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.