Поведение автозаполнения Bash в Debian 8

2476
alle_meije

В новой установке Debian 8 (Jessie) я обнаружил, что автозаполнение в bash с использованием tabключа изменилось.

Тест, который я сделал, был:

  1. Откройте терминал (в моем случае Konsole). Над подсказкой это показывает
    ~ ~
    ~ ~ ~
    ~ ~ ~ ~
    ~ ~ ~ ~ ~
    ~ ~ ~ ~ ~ ~
    ~ ~ ~ ~ ~ ~ ~
    ~ ~ ~ ~ ~ ~ ~ ~
    ~ ~ ~ ~ ~ ~ ~ ~ ~
    ~ ~ ~ ~ ~ ~ ~ ~ ~ ~
  2. mkdir -p /tmp/test # создать тестовый каталог
  3. cd /tmp/test # зайти в пустой каталог
  4. ls <tab> <tab> <tab> <tab>
    /tmp/test /tmp/test ~ ~ ~ ~ ~ ~ ~ ~ ~# через 1 tab
    /tmp/test /tmp/test /tmp/test ~ ~ ~ ~ ~ ~ ~ ~ ~# через 2 tabс
    /tmp/test /tmp/test /tmp/test /tmp/test ~ ~ ~ ~ ~ ~ ~ ~ ~# через 3 tabс
    /tmp/test /tmp/test /tmp/test /tmp/test /tmp/test ~ ~ ~ ~ ~ ~ ~ ~ ~# через 4 tabс

Раньше просто показывал файлы в каталоге (если есть). Кто-нибудь знает, что вызывает это? Что-то в .bashrc? Рад отправить больше файлов, если это поможет!

0
Очевидный вопрос, но есть ли у вас пакет `bash-complete`? Давайте получим вывод `dpkg -l | grep bash`. Faheem Mitha 8 лет назад 0
`ii bash 4.3-11 + b1 amd64 GNU Bourne Again SHell` и` ii bash-complete 1: 2.1-4 все программируемое завершение для оболочки bash` alle_meije 8 лет назад 0
Weird. Запуск Джесси здесь, и он создает список файлов, как и ожидалось. Faheem Mitha 8 лет назад 0
также странно, что для программ в пути это работает как ожидалось. Таким образом, 'pdf'`tab` (2x) дает список из примерно 40 инструментов pdf, а' pdfl'`tab` дает 'pdflatex'. Должно быть, что-то в .bashrc или .profile пошло не так, я просто не могу найти что. alle_meije 8 лет назад 0
Проверьте ваши локальные `.bashrc`, а также` / etc / bash.bashrc` и `/ etc / profile`, чтобы увидеть, есть ли что-нибудь нехорошее в любом из них. У меня нет ".profile". Я не думаю, что это стандартно, по крайней мере, в Debian. Возможно, стоит посмотреть на вывод `set`, чтобы увидеть, есть ли там что-нибудь, хотя обычно это много. Faheem Mitha 8 лет назад 1
Ха! Я обнаружил, что в моем старом файле `.bash_aliases` было написано` alias [= 'pushd.'` и `alias] =' popd'`, который я использовал довольно часто в старые времена. Комментирование этих комментариев в текущей копии решило непосредственную проблему, хотя все еще интригует то, что заставило эти псевдонимы перестать работать между Debian 7 и 8. alle_meije 8 лет назад 0

1 ответ на вопрос

1
alle_meije

Нашел ответ на эту загадку в 2 этапа. Во-первых, мой старый .bash_aliasesиспользовал alias [='pushd .'и alias ]='popd'. Удаление этих строк решило странное поведение выше, но я потерял свои псевдонимы.

Но если я буду держать эти псевдонимы и поставить строку

if [[ -f ~/.bash_aliases ]]; then . ~/.bash_aliases fi 

в .bashrc после строки

if ! shopt -oq posix; then if [[ -f /usr/share/bash-completion/bash_completion ]]; then . /usr/share/bash-completion/bash_completion elif [[ -f /etc/bash_completion ]]; then . /etc/bash_completion fi fi 

то я могу и держать мои [и ]псевдонимы и имею нормальное автодополнение. Похоже, псевдонимы мешают настройке автозаполнения Джесси в Bash. Единственная причина, по которой вызов .bash_aliasesбыл до вызова сценариев автодополнения изначально, заключалась в том, что в шаблоне, .bashrcпоставляемом с установкой, они были в таком порядке.

возможно только через 24 часа :) alle_meije 8 лет назад 0