Заполнение вкладки не работает для команд

42

Я пытаюсь использовать выполнение табуляции для команд в Ubuntu 11.04 Beta 1, используя все последние обновления, но, похоже, не работает. (Несмотря на то, что установлено пакетное завершение пакета)

Завершение вкладки работает правильно только для каталогов или файлов.

Любые идеи, где копать?

    
задан Screatch 04.04.2011 в 11:32
источник

5 ответов

56

Проверьте, есть ли у вас следующий фрагмент в вашем .bashrc (должен быть там по умолчанию)

# enable programmable completion features (you don't need to enable
# this, if it's already enabled in /etc/bash.bashrc and /etc/profile
# sources /etc/bash.bashrc).
if [ -f /etc/bash_completion ] && ! shopt -oq posix; then
    . /etc/bash_completion
fi
    
ответ дан Adam Byrtek 04.04.2011 в 12:23
источник
11

Я подумал, что я также добавлю следующее дополнительное объяснение неудачи завершения bash - он слишком длинный для комментария и может быть полезен для кого-то, у кого есть проблема с завершением bash, поскольку, по-видимому, это «общий» канонический вопрос, на который ссылаются все дубликаты.

Даже если у вас есть соответствующая строка в .bashrc (как в ответе выше) и установленном пакете bash-completion , завершение bash может по-прежнему сбой, если у вас есть shopt -s nullglob или shopt -s failglob в .bashrc или .bash_aliases .

Следующие сценарии были протестированы со всеми пользовательскими настройками .bashrc и .bash_aliases удалены, чтобы дать справедливый тест, с соответствующей линией завершения bash в .bashrc и с bash-completion .

1) Первый сценарий - это когда у вас shopt -s failglob в .bashrc или .bash_aliases .

При попытке включить полные каталоги и файлы соответственно, эти ошибки будут иметь место:

cd Dbash: no match: "${COMP_WORDS[@]}"  
cat pabash: no match: words[0]=${!ref}${COMP_WORDS[i]}

Однако команды будут успешно завершены.

2) С включенным shopt -s nullglob , попытка заполнить каталог или файл приведет к тому, что все будет указано, без завершения:

cd Do
.adobe/                  .gimp-2.6/               Podcasts/
.aptitude/               .gnome2/                 Public/
.audacity-data/          .gnome2_private/         .pulse/
............

Я прервал листинг здесь, поскольку он был очень длинным и не нужно воспроизводить все это.

Опять же, завершение команды все равно будет работать.

Итак, просто удаление shopt -s failglob или shopt -s nullglob также может решить проблему ошибок с завершением bash, предполагая, что у вас есть соответствующая строка в ваших .bashrc и bash-completion .     

ответ дан user76204 24.12.2012 в 16:38
8

В дополнение к изменению файла /etc/bash.bashrc (другие ответы) вам может потребоваться установить пакет bash-completion .

Проверьте, если файл /etc/bash_completion exsits. Если нет:

sudo apt-get install bash-completion

(В моем инсталляции Debian 7 он изначально не был установлен)

    
ответ дан SergeanT 07.09.2015 в 13:58
6

Насколько это возможно, убедитесь, что bash - это ваша активная оболочка

echo $SHELL

Я только что обновился до Ubuntu 14.04.1 LTS и не получил автоматическое завершение вкладки, даже после того, как я посоветовал это сообщение, только для того, чтобы реализовать свою оболочку, было установлено значение /bin/sh , а не /bin/bash .

    
ответ дан nocdib 19.11.2014 в 16:35
0

Обновление до Ubuntu 14.04.01

Проверьте, есть ли у вас следующий фрагмент в вашем .bashrc (должен быть там по умолчанию)

sudo vim /etc/bash.bashrc (введите «i», чтобы отредактировать файл)

    # enable bash completion in interactive shells
    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

Раскомментировать 7 строк выше

Сохранить файл "esc + w + q + enter"

Перезапустить bash

exec bash

    
ответ дан Diego Arriola 02.09.2014 в 21:25