Debian - autouzupełnianie apt (nie apt-get) nie działa

19

Jestem na Debian Jessie 8.6. Zauważyłem, że apt-getdostaje oczekiwane automatyczne uzupełnianie bash po naciśnięciu klawisza tab dla pakietów i polecenia, ale gdy próbuje się z aptnim korzystać, nie działa. Pamiętam, że korzystałem z Xubuntu 16.04, gdzie działało, więc dziwne jest to, że tutaj nie działa. Czy istnieje sposób, aby włączyć to również dla polecenia apt? Jeśli tak to jak?

Andrea
źródło
Czy coś dla ciebie działało?
Lynob
@Lynob Skończyłem przeprowadzkę do Ubuntu, więc nie mogę ci pomóc, przepraszam.
Andrea

Odpowiedzi:

19

Debian nie ma zainstalowanej i włączonej funkcji „bash-complete”.

Aby to naprawić, uruchom (jako root):

apt-get install bash-completion

Następnie masz dwie opcje. Możesz (1) włączyć go dla każdego użytkownika lub (2) włączyć globalnie.

  1. Jeśli chcesz włączyć to tylko dla swojego użytkownika, edytuj ~/.bashrc- dodaj:

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

    Aby wypróbować bez wylogowania i ponownego zalogowania, uruchom:

    . ~/.bashrc
    

    Lub otwórz nową powłokę. Następnie spróbuj użyć tab-uzupełniania z apt. Ta kropka i spacja na początku ( .) są takie same, jak użycie sourcesłowa kluczowego w bash, ale są bardziej przenośne.

    Jeśli chcesz, aby działał, gdy suzalogowałeś się na konto root, zrób to samo w katalogu głównym roota (zazwyczaj /root).

  2. Aby włączyć go globalnie, wykonaj zmiany od (1) w pliku /etc/bash.bashrc.

Dla każdego, kto zastanawia się dlaczego to działa, że .z przodu /etc/bash_completionma nie odnoszą się do bieżącego katalogu, ponieważ zawiera spacje wokół niego. Zamiast tego powoduje, że zawartość danego pliku jest oceniana w aktualnie uruchomionej powłoce, zamiast być uruchamiana w nowej podpowłoce. Tutaj jest znormalizowany.

W Bash .można to zastąpić poleceniem source, ale nie jest to standaryzowane przez POSIX i jest mniej przenośne, więc staram się odciągać ludzi od korzystania z niego. W tym przypadku, ponieważ jest to specjalnie program do rozszerzania bash, a nie coś, co musi działać w powłoce Bourne'a ksh, możesz swobodnie zastąpić sourceczytelność.

Wyatt8740
źródło
2
Zrobiłem już te kroki, ale to nie pomogło. Działa tylko z apt-get, ale apt nie.
Andrea
@Andrea Och, przykro mi, chyba nie przeczytałem w pełni twojego pytania. W tej chwili nie jestem przy swoim pudełku Debiana (w systemie Windows niestety mam tylko cygwina), ale spróbuję to rozgryźć na mojej maszynie Debiana, kiedy wrócę do domu.
Wyatt8740,
5

W Debian 9 Stretch po prostu edytuj /etc/bash.bashrc i odkomentuj:

# 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
4 szt. 0
źródło
3

Skopiuj ten plik konfiguracyjny z Ubuntu: / usr / share / bash-complete / completions / apt do tego samego katalogu w Jessie. Możesz również pobrać plik tutaj: http://pastebin.com/PRBMt3an

minaev
źródło
To jest to, czego potrzebuję. Ale automatyczne uzupełnianie nie działa dla apt, po skopiowaniu zmieniłem nazwę pobranego pliku apt na / usr / share / bash-uzupełnianie / ukończenia /. Jak to działa?
klor
Plik pastebin.com/PRBMt3an był w systemie Windows CR LF linefeed, dlatego nie działał. Musiałem przekonwertować format linii na uniksowy LF linefeed, więc pracowałem po uruchomieniu nowego terminalu.
klor
Oto plik „apt” z poprawnym podawaniem liniowym
klor
1

Jak to rozwiązałem

Miałem problemy z autouzupełnianiem wgetpodczas próby autouzupełniania apt-get install wg[TAB][TAB]i udało mi się go rozwiązać, usuwając --no-generateparametr z poniższych much:

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

Warto wspomnieć, że te pliki są dostępne dopiero po instalacji bash-completion.

--no-generateParametr mam na myśli widać w wierszu poniżej, ale usunięte wszystkie --no-generate, nie tylko z tej linii: https://github.com/scop/bash-completion/blob/master/completions/apt-get# L28

Jak doszedłem do tego punktu?

Dotarłem do tego punktu po uruchomieniu set -vwcześniej apt-get install wg[TAB][TAB], co pokazało, że wykonane polecenie to:

apt-cache --no-generate pkgnames wg

a wynik był błędem:

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

Kiedy wykonałem apt-cache pkgnames wgbez --no-generatepoprawnie otrzymałem listę do autouzupełniania:

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

Mam nadzieję że to pomoże.

Ruben Alves
źródło
To było dokładnie to, czego potrzebowałem. Dzięki: D
Ceisc