Debian - il completamento automatico di apt (non apt-get) non funziona


19

Sono su Debian Jessie 8.6. Ho notato che apt-getottiene il completamento automatico previsto bash quando si preme tab per pacchetti e comando, ma quando si tenta di usarlo con aptesso non funziona. Ricordo di aver usato xubuntu 16.04 dove ha funzionato, quindi trovo strano che qui non funzioni. C'è un modo per abilitarlo anche per il comando apt? Se é cosi, come?


Qualcosa ha funzionato per te?
Lynob,

@Lynob Ho finito per trasferirmi su Ubuntu, quindi non posso aiutarti, scusa.
Andrea,

Risposte:


20

Debian non viene fornito con 'bash-completamento' installato e abilitato.

Per risolvere questo problema, esegui (come root):

apt-get install bash-completion

Quindi, hai due opzioni. Puoi (1) abilitarlo in base all'utente per te stesso o (2) abilitarlo a livello globale.

  1. Se vuoi abilitarlo solo per il tuo utente, modifica ~/.bashrc- aggiungi quanto segue:

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

    Per provarlo senza disconnettersi e riconnettersi, eseguire:

    . ~/.bashrc
    

    O apri una nuova shell. Quindi prova a utilizzare il completamento con tab con apt. Quel punto e spazio all'inizio ( .) è uguale all'utilizzo della sourceparola chiave in bash, ma è più portabile.

    Se vuoi che funzioni quando ti trovi sunell'account root, fai la stessa cosa nella home directory di root (in genere /root).

  2. Per abilitarlo a livello globale, eseguire invece le modifiche da (1) nel file /etc/bash.bashrc.

Per chiunque si stia chiedendo perché funzioni , il .davanti /etc/bash_completionnon si riferisce alla directory corrente, poiché ha spazi attorno ad essa. Rende invece il contenuto del file dato valutato nella shell attualmente in esecuzione, invece di essere eseguito in una nuova subshell. È standardizzato qui.

In Bash, questo .può essere sostituito dal comando source, ma questo non è standardizzato da POSIX ed è meno portatile, quindi tendo ad allontanare le persone dall'usarlo. In questo caso, dal momento che è specificamente un programma per estendere bash, piuttosto che qualcosa che deve funzionare in una shell bourne o ksh, puoi sentirti libero di sostituire la sourceleggibilità.


1
Ho già fatto questi passaggi, ma questo non ha aiutato. Funziona solo con apt-get, ma apt no.
Andrea,

@Andrea Oh, scusa, non ho letto completamente la tua domanda, immagino. Al momento non sono nel mio box Debian (in Windows, purtroppo tutto ciò che ho è Cygwin), ma cercherò di capirlo dalla mia macchina debian quando torno a casa.
Wyatt8740,

5

In Debian 9 Stretch basta modificare /etc/bash.bashrc e decommentare:

# 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

Copia questo file di configurazione da Ubuntu: / usr / share / bash-completamento / completions / apt nella stessa directory in Jessie. Puoi anche ottenere il file qui: http://pastebin.com/PRBMt3an


Questo è quello di cui ho bisogno. Ma il completamento automatico non funziona per apt, dopo che ho copiato, rinominato il file apt scaricato in / usr / share / bash-completamento / completions /. Come farlo funzionare?
Klor,

Il file pastebin.com/PRBMt3an era in avanzamento di riga LF di Windows CR, per questo motivo non ha funzionato. Ho dovuto convertire il formato di linea in linefeed Unix LF, quindi ho lavorato dopo aver avviato un nuovo terminale.
Klor,

Ecco il file 'apt' con il corretto avanzamento riga: filedropper.com/apt_1
klor

1

Come l'ho risolto

Ho avuto problemi di completamento automatico che cercano di completare automaticamente wgetcon apt-get install wg[TAB][TAB]e sono riuscito a risolverlo rimuovendo il --no-generateparametro dei mosche di seguito:

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

Vale la pena ricordare che questi file sono disponibili solo dopo l'installazione bash-completion .

Il --no-generateparametro a cui mi riferisco è visibile nella riga seguente, ma ho rimosso TUTTO --no-generate, non solo da questa riga: https://github.com/scop/bash-completion/blob/master/completions/apt-get# L28

Come sono arrivato a questo punto?

Sono arrivato a questo punto dopo aver eseguito in set -vprecedenza apt-get install wg[TAB][TAB], che ha dimostrato che il comando eseguito era:

apt-cache --no-generate pkgnames wg

e l'output è stato un errore:

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

Quando ho eseguito apt-cache pkgnames wgsenza il --no-generateho ottenuto correttamente l'elenco per il completamento automatico:

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

Spero che sia di aiuto.


Era esattamente quello di cui avevo bisogno. Grazie: D
Ceisc

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.