निर्देशिका नाम रखने वाले पर्यावरण चर के लिए बैश स्वतः पूर्णता


10

मैं अन्य बातों के अलावा, लिनक्स मिंट 14 पर 4.2.37 मार रहा हूं।

जब मैं टाइप करके किसी पर्यावरण चर का नाम स्वत: पूर्ण करता है Tab, तो यह एक स्थान के बाद चर के नाम पर फैलता है।

यदि चर का मान निर्देशिका नाम होता है, तो मैं चाहता हूं कि इसके बाद चर के नाम का विस्तार हो /

उदाहरण के लिए, यदि मैं टाइप करता हूं:

$ ls $HOM<tab>

इसका विस्तार होता है:

$ ls $HOME _

जहां _कर्सर का स्थान चिह्नित करता है। समस्या यह है कि मैं तब आम तौर पर अपने घर निर्देशिका के तहत कुछ फ़ाइल या निर्देशिका का नाम लिखना जारी रखना चाहता हूं, जिसका मतलब है कि मुझे टाइप करना होगा backspaceऔर फिर /

इसलिए मैं चाहता हूं कि ऊपर का विस्तार हो:

$ ls $HOME/_

जब मैंने संपूर्ण चर नाम टाइप किया है तो वही बात होती है; के बाद ls $HOME, tabएक स्थान जोड़ता है, और मैं चाहता हूं कि इसे जोड़ा जाए /

(और निश्चित रूप से मैं यह नहीं जोड़ना चाहता /कि चर का मान निर्देशिका नाम नहीं है।)

क्या कोई तरीका है जो मैं बैश को बता सकता हूं कि मैं जिस तरह से व्यवहार करना चाहता हूं, या तो बैश कमांड के माध्यम से या मेरे अपडेट करने से $HOME/.inputrc?

नोट: मैं विशेष रूप tabसे जिस तरह से मैं चाहता हूं, वह व्यवहार करने का एक तरीका ढूंढ रहा हूं। विभिन्न कीस्ट्रोक्स के साथ समान व्यवहार को प्राप्त करने के तरीके दिलचस्प होंगे, लेकिन मेरे सवाल का जवाब नहीं देंगे।

(मैंने /etc/profile.d/bash_completion.shअपने सिस्टम पर अक्षम कर दिया है क्योंकि यह खराब तरीके से इंटरैक्ट set -o nounsetकरता है। एक त्वरित प्रयोग बताता है कि यह संभवतः मेरे प्रश्न के लिए प्रासंगिक नहीं है)।

संयोग से, tcsh ऐसा करता है: एक पर्यावरण चर दिया जाता है $FOOBAR, टाइपिंग $FOOBA<tab>फैलता है $FOOBAR/अगर यह एक निर्देशिका को संदर्भित करता है, $FOOBAR(एक स्थान के साथ) यदि यह नहीं करता है। नहीं, यह मुझे वापस tcsh में जाने के लिए राजी करने के लिए पर्याप्त नहीं है। zsh यह भी करता है।


+1 यदि आप रोमांच महसूस करते हैं, तो यहां कोड है
l0b0

@ l0b0: (a) मेरे पास पहले से ही है। (ख) मुझे नहीं महसूस कर रहा हूँ काफी है कि साहसिक। (c) यह माना जाता है कि यह प्रोग्राम पूरा होने योग्य है।
कीथ थॉम्पसन

जवाबों:


6

2014-02-26 को जारी किए गए बैश 4.3 में यह सुविधा लागू है।

NEWSफ़ाइल का उद्धरण (शीर्ष स्तर पर शामिल bash-4.3.tar.gz, GPG हस्ताक्षर भी देखें ):

शब्द पूर्णता कोड यह जाँचता है कि शेल चर वाला फ़ाइल नाम किसी निर्देशिका नाम तक विस्तृत है या नहीं और /यह शब्द के लिए उपयुक्त है। कमांड कोड पूरा होने पर समान कोड शेल नामों में कमांड वेरिएबल का विस्तार करता है।

स्रोत से निर्मित प्रति के साथ एक त्वरित प्रयोग से पता चलता है कि यदि मैं टाइप करता हूं

$ ls $HOM<tab>

अब यह फैलता है

$ ls $HOME/

(संयोग से, zsh भी ऐसा करता है।)


1
इसके लिए मैन्युअल रूप से बैश स्थापित करना पड़ा। 4.3 फेडोरा 20 रिपोज में नहीं है।
jozxyqk

5
shopt -s direxpand

मदद करेगा, कोई स्थान नहीं होगा जिससे आप टाइपिंग जारी रख सकते हैं लेकिन यह एनवायरनमेंट वैरिएबल को उसकी सामग्री से बदल देगा।

Alsp /programming/6418493/bash-variable-expansion-on-tac-complete देखें

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