टैब पूरा होने के दौरान $ भागने से रोकने के लिए बैश कैसे प्राप्त करें?


38

मेरे पास कमांड लाइन पर यह है:

ln -sf $PWD/wine-

और फिर मैं Tabफ़ाइलनाम पूरा करने के लिए मारा । उबंटू के पुराने संस्करणों में, wine-फ़ाइल नाम को पूरा करने के लिए यह ठीक काम करता था (और $PWDउस समय साइड-इफ़ेक्ट का विस्तार किया जाएगा)। लेकिन अब इसे में बदल देता है

ln -sf \$PWD/wine-

जो कि मेरा मतलब बिल्कुल भी नहीं है और कुछ भी पूरा नहीं करता है क्योंकि फ़ाइल का शाब्दिक रूप से प्रारंभ नहीं होता है $

मैं कम टूटे हुए व्यवहार को कैसे पूरा करूं?

set मुझे बताता है कि ये मेरी वर्तमान सेटिंग हैं:

BASHOPTS=checkwinsize:cmdhist:expand_aliases:extquote:force_fignore:hostcomplete:interactive_comments:progcomp:promptvars:sourcepath
SHELLOPTS=braceexpand:emacs:hashall:histexpand:history:interactive-comments:monitor

2
यदि आप इस बग से प्रभावित हैं, तो कृपया निम्न url के तहत मतदान पर विचार करें (लॉगिन की आवश्यकता है): bugs.launchpad.net/ubuntu/+source/bash/+bug/778627/…
cripton

जवाबों:


36

मैंने पाया है कि bash संस्करणों> = 4.2.29 में एक नया शॉपटdirexpand सेटिंग है। (देखें man docs/bash.1कि क्या आप नए बैश की जांच करते हैं या लाइन 8951 से bash.1 देखें )

यदि कोई क्वांटल क्विटज़ल 12.10 का उपयोग करता है या अन्यथा पकड़ लेता है (या चेक आउट और बनाता है) एक नया बैश, तो:

shopt -s direxpand

मुझे वह व्यवहार देता है जो मुझे चाहिए, ज़रूरत और प्यार।

युक्ति: इस बीच, Ctrl+ Alt+ Eबजाय Tabक्या मैं भी चाहता हूँ करता है। लेकिन अजीब है।

BTW, कई थ्रेड्स हैं जिन्हें "बैश टैब वैरिएबल एक्सपेंशन क्वेश्चन?" में gnu.bash.bug । उन्हें पढ़ने से, मुझे यहाँ जानकारी मिली।


2
direxpand के साथ बैश का एक संस्करण सटीक (12.04) में अपना रास्ता बना रहा है: Bugs.launchpad.net/bugs/778627
keturn

7
अगर मैं अपने विशाल पथ का विस्तार नहीं करता तो और भी बेहतर होगा और पूरा होने के साथ एक अन-एस्केपेड चर का उपयोग करना जारी रख सकता है।
jozxyqk

@jozxyqk क्या आपको कभी कोई रास्ता नहीं मिल रहा है कि कोई पथ-विस्तार सुविधा न हो?
नंगे पैर

@Ungeheuer मैं फिलहाल 4.4.19Ubuntu 18.04 पर बैश का उपयोग कर रहा हूं और यह सिर्फ काम करता है। यकीन नहीं हुआ जब यह बदल गया।
२२:२२ बजे jozxyqk

2

_filedir()शीर्ष स्तर bash_completion स्क्रिप्ट में खोज करें और लाइन बदलें

compopt -o filenames 2>/dev/null

सेवा मेरे

compopt -o filenames -o noquote 2>/dev/null

12.04 GNU बैश में, संस्करण 4.2.25 में यह सुझाव त्रुटि देता है:compopt: noquote: invalid option name
arielf

1

12.04 के साथ उन (मेरे जैसे) के लिए $ PWD के बजाय ~ + का उपयोग कर सकते हैं ...

उदाहरण के लिए :

cd /bin
echo ~+/ls
/bin/ls

1

अद्यतन किए गए बैश के साथ, मुझे पता था कि $अभी भी बच गया है।

  • bash-completion (1:2.1-3.fc20)पैकेज निकालना
  • या बस /etc/bashrcसे सोर्सिंग नहीं ~/.bashrcइसे ठीक करने के लिए लग रहा था।

मुझे संदेह है कि अब मुझे कुछ ऐसी सुविधाएँ नहीं मिलेंगी जो मैं आमतौर पर इस्तेमाल कर रहा हूँ, लेकिन अभी तक कोई ध्यान नहीं दिया गया है।


वैकल्पिक (कम से कम फेडोरा 26 के लिए), export BASH_COMPLETION_VERSINFO=0सोर्सिंग से पहले जोड़ें /etc/bashrc। यह समस्याग्रस्त स्क्रिप्ट को लगता है कि इसकी पहले से ही खटास हो गई है।



0

शेल विकल्प को '' पूरा_फ्लोटोटेक्ट '' को निष्क्रिय करना कार्य करता है:

shopt -u complete_fullquote

$ shopt -u complete_fullquote -bash: shopt: complete_fullquote: अमान्य शेल विकल्प नाम
एंटोन गोरेव

0
shopt -u progcomp

इसने मेरे लिए इसे ठीक कर दिया, इसने बहुत सारे "बुद्धिमान" पूर्णता के विकल्पों को भी हटा दिया, जो मुझे फाइलों को पूरा न करने के तरीके से मिले हैं, जो मुझे पता है कि वहाँ हैं क्योंकि मूर्खतापूर्ण बात सोचती है कि मैं उन्हें एक विशेष के लिए तर्क के रूप में नहीं चाहता। आदेश। ARRRGH

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