पर्यावरण चर के लिए बैश ऑटो पूरा [बंद]


25

बैश स्वतः पूर्ण सुविधा 11.04 में पर्यावरण चर के साथ काम नहीं करती है। वर्तमान व्यवहार नीचे इंगित किया गया है

export SCRIPT=/home/user/script
cd $SCRIPT/<tab>

बैकस्लैश ( \) के परिणाम के पहले $SCRIPTयानी प्रॉम्प्ट बनने से पहले जोड़ा जा रहा है

cd \$SCRIPT/

एक ही बात होती है अगर किसी अन्य कमांड के cdसाथ प्रतिस्थापित किया जाता हैls

इसके अलावा, अगर $ SCRIPT में निहित पथ में एक निष्पादन योग्य फ़ाइल है और मैं इसे चलाना चाहता हूं

$SCRIPT/<tab>

बैश फ़ोल्डर के अंदर के विकल्प नहीं दिखाते हैं (इस बात की परवाह किए बिना कि पर्यावरण चर में निहित पथ के अंदर एक ही फाइल या कई फाइलें / निर्देशिकाएं हैं)।

दूसरे शब्दों में, स्वत: पूर्ण वातावरण चर के साथ काम नहीं करता है।



मुझे लगता है कि इसे बैश संस्करण (4.1 या 4.2) के साथ नहीं करना है। मैंने अभी-अभी bash-4.1 को स्रोतों से स्थापित किया है और 4.2.24 (Ubuntu 12.04 के संस्करण के बजाय इसका उपयोग किया है, स्रोतों से स्थापित किया गया है ताकि मुझे प्रत्येक sys अपग्रेड पर पैकेज को 'होल्ड' न करना पड़े) और व्यवहार बिल्कुल वैसा ही। बहुत, बहुत कष्टप्रद ...

4
यह प्रश्न ऑफ़-टॉपिक प्रतीत होता है क्योंकि यह पुराने असमर्थित रिलीज़ में बग के बारे में है। बग वर्णन किया गया है यहाँ और 12.04 में और बाद में तय किया गया है
वॉरेन हिल

1
@WarrenHill यह ऑफ-टॉपिक हो सकता है क्योंकि यह बग के बारे में है (और मैंने इसे इस कारण से बंद करने के लिए मतदान किया है)। बग एक असमर्थित रिलीज़ में है, हालांकि अप्रासंगिक है - हम पुराने प्रश्नों को बंद नहीं करते हैं जिनके पास ऑफ-टॉपिक के रूप में उत्तर होता है जब प्रभावित रिलीज़ की ईओएल तिथि आती है। केवल नए / अनुत्तरित EoL प्रश्न ऑफ़ टॉपिक हैं।
एलियाह कगन

जवाबों:


13

इस बग को bash 4.2 में पेश किया गया था। यहाँ इसके बारे में एक लंबा धागा है:

http://lists.gnu.org/archive/html/bug-bash/2011-02/msg00274.html

संक्षेप में, चेत रेमी, बैश के डेवलपर, निश्चित नहीं हैं कि इसे अभी तक कैसे ठीक किया जाए।


वहाँ 4.1 को वापस करने के लिए एक रास्ता है?
नीलचट

1
रास्ते में एक फिक्स है: चेत ने पुराने व्यवहार को बहाल करने के लिए एक "डीरेक्सपांड" की दुकान को जोड़ा। यह अभी तक वनैरिक में नहीं है।
नेल्सन

8
यह मेरे लिए आश्चर्य की बात है कि इतने कम लोगों ने इस बारे में शिकायत की है। यह कई वर्षों से काम करने के तरीके से एक बड़ा बदलाव है।
स्कॉट सी विल्सन

11

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

shopt -s direxpand

या इसे अपने में शामिल करें .bashrc

यदि आप बैश के विभिन्न संस्करणों के साथ एक ही .bashrc का उपयोग करते हैं, तो उपयोग करें

if ((BASH_VERSINFO[0] >= 4)) && ((BASH_VERSINFO[1] >= 2))
    then shopt -s direxpand
fi

1
यह परीक्षण 5.0 और 5.1 बैश के लिए विफल हो जाएगा।
कीथ थॉम्पसन

8

Http://lists.gnu.org/archive/html/bug-bash/2011-02/msg00273.html में सुझाया गया है:

  1. <Tab>कमांड लाइन कहती है कि आप अपने पर्यावरण चर सेंट को पूरा करने के लिए उपयोग करेंcd $MYVAR
  2. हिट <Esc>+ <Ctrl>-Eवर्तमान कमांड लाइन का विस्तार करने के लिए अर्थात $MYVARइसके मूल्य, पथ द्वारा स्थानापन्न करें
  3. एक जोड़ें /और फिर <Tab>हमेशा की तरह ऑटो-समापन का आनंद लें

यह मानता है कि आप emacs मोड में हैं ( set -o emacs) और bash_completionसमझदारी से सेट किया है cd(जैसे complete -o nospace -F _cd cd)।

दुर्भाग्य से यह vi मोड ( set -o vi) में काम नहीं करता है क्योंकि कमांड लाइन विस्तार तब उपलब्ध नहीं है।


2

शेल चर टाइप करने के बाद

cd $SCRIPT/

Cntrl-Alt-E टाइप करें। यह चर का विस्तार करता है

cd /home/user/script/

यह फेडोरा 16 में EDITOR = vi के साथ काम करता है।

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