Завершение табуляции заставляет избегать появления знаков доллара

Использование Ubuntu 12.04. Когда я набираю путь в терминале, который начинается с env ссылка на переменную, я нажимаю клавишу табуляции, чтобы завершить слово, и оно ускользает от $ в env ссылка на переменную. В результате я должен продолжать возвращаться к началу строки и удалять обратную косую черту, чтобы продолжить навигацию по дереву.

НАПРИМЕР

Перед вкладкой:user@test:~$ $HOME/Docum

После вкладки:user@test:~$ \$HOME/Documents/

В моем $HOME/.bashrc включена функция "bash_completion".

2 ответа

Это что-то с версией bash, которая поставляется с Ubuntu 12.04.

Я смог скомпилировать bash из исходного кода, чтобы получить версию bash до 4.2.37, что решило проблему.

В комментариях вы упоминаете, что ваша настоящая проблема была не с $HOME. Это очень важно, так как имеет значение, является ли это переменной среды или нет.

Bash сначала завершит возможные переменные окружения, если вы начнете со знака доллара, а затем завершите имя файла. Поэтому, если он не может найти переменную для завершения, он мог бы найти имя файла, и в этом случае он будет экранировать знак доллара с обратной косой чертой, поскольку это специальный символ.

Если вы начали свою команду с программой, за которой следовали некоторые переменные, завершение можно было бы передать программируемому завершению, что также могло бы вызвать это. Например, введя gzip $HOME/, а затем tab, вы вставите обратную косую черту. Файлы, обрабатывающие программируемое завершение, принадлежат пакету 'bash-завершению', так что вы можете либо удалить этот пакет (я его не установил), либо вы можете убедить их, что это ошибка. Сопровождающие: http://bash-completion.alioth.debian.org/

Обновление: в Arch Linux я опробовал bash-дополнения версии 2.0, и он работает, как и ожидалось ls $HO<TAB>, но не для ls $HOME/<TAB> так что я думаю, что они все еще не решили эту ошибку (Ubuntu использует версию 1.3). Вы можете попробовать установить версию 2.0 вручную, но учтите, что она работает не полностью. (Поскольку в отчете об ошибке также упоминается, что это может быть bash, я использую версию 4.2.37 вместо 4.2.24)

Другие вопросы по тегам