Завершение табуляции заставляет избегать появления знаков доллара
Использование 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)