Debian - автоматичне завершення apt (не apt-get) не працює


20

Я на Debian Jessie 8.6. Я помітив, що apt-getотримує очікуване автозавершення bash при натисканні на вкладку для пакетів та команд, але при спробі використовувати його з aptцим не працює. Я пам'ятаю, як використовував xubuntu 16.04 там, де він працював, тому мені здається дивним, що він не працює тут. Чи є спосіб включити його і для команди apt? Якщо так, то як?


Чи щось працювало для вас?
Ліноб

@Lynob Я перейшов до Ubuntu, тому не можу вам допомогти, вибачте.
Андреа

Відповіді:


19

Debian не має встановленого і включеного 'bash-завершення'.

Щоб виправити це, запустіть (як 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).

  2. Щоб увімкнути це глобально, /etc/bash.bashrcзамість цього зробіть зміни (1) у файлі .

Для тих , хто цікаво , чому це працює, то .перед /etc/bash_completionзовсім НЕ відносяться до поточного каталогу, так як вона має прогалини навколо нього. Він натомість змушує оцінювати вміст даного файлу в поточній запущеній оболонці, замість того, щоб він був виконаний у новій підзарядці. Тут це стандартизовано.

У Bash це .можна замінити командою source, але це не стандартизовано POSIX і є менш портативним, тому я схильний відхиляти людей від його використання. У цьому випадку, оскільки це спеціально програма для розширення bash, а не те, що потрібно працювати в bourne shell або ksh, ви можете сміливо замінювати sourceчитабельність.


2
Я вже робив ці кроки, але це не допомогло. Працює лише з apt-get, але apt - ні.
Андреа

@Andrea О, вибачте, я не до кінця прочитав ваше запитання. Наразі я не в своїй коробці Debian (у Windows, на жаль, все, що я маю, - це, на жаль, cygwin), але я спробую це зрозуміти зі своєї машини Debian, коли я повернуся додому.
Wyatt8740

6

У 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

Скопіюйте цей файл конфігурації з Ubuntu: / usr / share / bash-завершення / завершення / apt в той самий каталог в Джессі. Ви також можете отримати файл тут: http://pastebin.com/PRBMt3an


Це те, що мені потрібно. Але автоматичне завершення не працює для apt, після того як я скопіював, перейменував завантажений файл apt у / usr / share / bash-завершення / завершення /. Як змусити це працювати?
klor

Файл pastebin.com/PRBMt3an знаходився в Windows CR LF linefeed, тому він не працював. Мені довелося перетворити формат лінії в Unife LF linefeed, тому потім працював після запуску нового терміналу.
klor

Ось файл "apt" з правильним рядком передачі
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

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.