Як змусити bash зупинити втечу $ під час завершення вкладки?


38

У мене це є в командному рядку:

ln -sf $PWD/wine-

а потім натисніть, Tabщоб завершити ім'я файлу. У попередніх версіях Ubuntu це працювало чудово, щоб завершити 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чи ви перевіряєте новий bash чи бачите bash.1 з рядка 8951 )

Якщо хтось використовує Quantal Quetzal 12.10 або іншим чином отримує (або перевіряє та створює) новий баш, тоді:

shopt -s direxpand

Надає мені поведінку, яку я хочу, потребую і люблю.

Обхід: Тим часом Ctrl+ Alt+ Eзамість того, щоб Tabробити те, що я теж хочу. Але незручно.

BTW, Є кілька потоків під назвою "питання про розширення вкладки bash?" в gnu.bash.bug . Прочитавши їх, я знайшов тут інформацію.


2
версія bash з direxpand пробивається у Precision (12.04): Див. bugs.launchpad.net/bugs/778627
keturn

7
Було б ще краще, якби я не розширив свій величезний шлях і міг би продовжувати використовувати не завершену змінну із завершенням.
jozxyqk

@jozxyqk Ви коли-небудь знаходили спосіб отримати цю функцію без розширення?
Ungeheuer

@Ungeheuer Я зараз використовую bash 4.4.19на Ubuntu 18.04, і він просто працює. Не впевнений, коли це змінилося.
jozxyqk

2

пошук _filedir()у сценарії bash_completion верхнього рівня та змінення рядка

compopt -o filenames 2>/dev/null

до

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

У 12.04 GNU bash, версія 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здавалося , щоб виправити це.

Я підозрюю, що зараз мені не вистачить деяких функцій, до яких я звик, але ще не помітив.


Альтернативно (принаймні для Fedora 26), додайте export BASH_COMPLETION_VERSINFO=0перед початком пошуку /etc/bashrc. Це змушує проблемний сценарій думати, що його вже знайдено.



0

Вимкнення параметра оболонки 'complete_fullquote' виконує цю роботу:

shopt -u complete_fullquote

$ shopt -u complete_fullquote -bash: shopt: complete_fullquote: Недійсне ім'я опції оболонки
Антон Горев

0
shopt -u progcomp

Це виправило це для мене, він також видалив багато "розумних" варіантів завершення, які я знайшов, перешкоджаючи не заповнюючи файли, які я знаю, що там є, тому що дурне думає, що я не хочу їх аргументувати конкретним командування. АРРРГГ

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.