Как я это решил

Как я это решил

Я использую Debian Jessie 8.6. Я заметил, что apt-getпри нажатии Tab для пакетов и команд он получает ожидаемое автодополнение bash, но при попытке использовать его с aptним он не работает. Я помню, как использовал xubuntu 16.04, где это работало, поэтому мне кажется странным, что здесь это не работает. Есть ли способ включить его aptи для команды? Если да, то как?

решение1

Debian не поставляется с установленным и включенным пакетом «bash-completion».

Если вы переходите на Debian, скажем, после Ubuntu, где он предустановлен и включен по умолчанию, это может стать источником некоторой путаницы.

Чтобы включить/исправить это, выполните (как root):

apt-get install bash-completion

Тогда у вас есть два варианта. Вы можете:

 1. Включите его для каждого пользователя отдельно или

 2. Включите его глобально.

1. Если вы хотите включить его только для своего пользователя, отредактируйте ~/.bashrc— добавьте следующее:

    if [ -f /etc/bash_completion ]; then
        . /etc/bash_completion
    fi

Чтобы попробовать это, не выходя из системы и не входя в нее снова, выполните:

    . ~/.bashrc

Или откройте новую оболочку. Затем попробуйте использовать автодополнение с помощью apt. Эта точка и пробел в начале ( .) — то же самое, что и использование sourceключевого слова в bash, но более переносимо.

Если вы хотите, чтобы это работало при suвходе в учетную запись root, сделайте то же самое в домашнем каталоге root (обычно /root).

2.Чтобы включить его глобально, выполните изменения из (1) в файле /etc/bash.bashrcвместо этого.

Для тех, кто задается вопросом, почему это работает, .перед этим /etc/bash_completionстоитнетссылаются на текущий каталог, так как вокруг него есть пробелы. Вместо этого он заставляет содержимое указанного файла оцениваться в текущей запущенной оболочке, а не выполняться в новой подоболочке.Здесь это стандартизировано.

В Bash это .можно заменить командой source, но это не стандартизировано POSIX и менее переносимо, поэтому я стараюсь отговаривать людей от ее использования. В этом случае, поскольку это программа для расширения bash, а не то, что должно работать в оболочке bourne или ksh, вы можете смело заменять sourceдля удобства чтения.

Кстати, такое поведение (не открытие подоболочки) похоже на то, как обычно работают скрипты DOS/Windows .BAT, изменяя состояние оболочки, в которой они запущены. Вот почему, если вы cdперейдете по другому пути в скрипте оболочки, вы не окажетесь по этому пути при завершении работы скрипта, как это было бы в .BAT.

решение2

В Debian 9 Stretch просто отредактируйте /etc/bash.bashrc и раскомментируйте:

# 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

решение3

Как я это решил

У меня возникли проблемы с автодополнением при попытке автодополнения wget, apt-get install wg[TAB][TAB]и мне удалось решить их, удалив --no-generateпараметр из следующих файлов:

/usr/share/bash-completion/completions/apt-cache
/usr/share/bash-completion/completions/apt-get

Стоит отметить, что эти файлы доступны только после установки bash-completion.

Параметр --no-generate, на который я ссылаюсь, можно увидеть в строке ниже, но я удалил ВСЕ --no-generate, а не только из этой строки: https://github.com/scop/bash-completion/blob/master/completions/apt-get#L28

Как я дошел до этого?

Я дошел до этого места после запуска set -vпредыдущей команды apt-get install wg[TAB][TAB], которая показала, что выполненная команда была:

apt-cache --no-generate pkgnames wg

и на выходе была ошибка:

E: Could not open file  - open (2: No such file or directory)

При выполнении apt-cache pkgnames wgбез него --no-generateя правильно получил список для автодополнения:

root@484f5c8f56ba:/# apt-cache pkgnames wg
wgalician-minimos
wget2
wgaelic
wget
wgerman-medical
wget2-dev

Надеюсь это поможет.

решение4

Скопируйте этот файл конфигурации из Ubuntu: /usr/share/bash-completion/completions/apt в тот же каталог в Jessie. Вы также можете получить файл здесь:http://pastebin.com/PRBMt3an

Связанный контент