Debian - автоматическое заполнение apt (not apt-get) не работает

19

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

Andrea
источник
У вас что-нибудь сработало?
Линоб
@Lynob Я перебрался в Ubuntu, поэтому не могу вам помочь, извините.
Андреа

Ответы:

20

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

Чтобы это исправить, запустите (с правами 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. Чтобы включить его глобально, /etc/bash.bashrcвместо этого внесите изменения из (1) в файл .

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

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

Wyatt8740
источник
1
Я уже сделал эти шаги, но это не помогло. Работает только с apt-get, но не с apt.
Андреа
@ Андреа Ой, прости, я не совсем прочитал твой вопрос, наверное. В данный момент я не нахожусь в своей коробке Debian (к сожалению, в Windows все, что у меня есть, это Cygwin), но я попытаюсь выяснить это с моей машины Debian, когда вернусь домой.
Wyatt8740 26.09.16
5

В 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
4pie0
источник
3

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

Минаев
источник
Это то, что мне нужно. Но автоматическое завершение не работает для apt, после того, как я скопировал, переименовал загруженный файл apt в / usr / share / bash-завершению / завершений /. Как заставить это работать?
Klor
Pastebin.com/PRBMt3an файл был в Windows , CR LF перевод строки, поэтому это не работа. Мне пришлось преобразовать формат строки в перевод строки Unix LF, чтобы потом работало после запуска нового терминала.
Klor
Вот «склонный» файл с правильным переводом строки: filedropper.com/apt_1
Klor
1

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

У меня были проблемы с автозаполнением 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

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

Рубен Алвес
источник
Это было именно то , что мне было нужно. Спасибо: D
Ceisc