Completamento automatico Apt-get


9

Attualmente sto eseguendo Debian Wheezy a 64 bit.

Sto riscontrando dei problemi con il completamento automatico di apt-get. Ho installato bash-completamento.

Se sono loggato come root in una shell, posso usare il completamento automatico per apt-get (es: apt-get install wicd [tab] [tab ]) e mi mostrerà tutti i pacchetti corrispondenti. Ma se provo a usare il completamento automatico per apt-get in un altro utente non root (anche con sudo) non funzionerà affatto. Posso completare automaticamente altre cose come i nomi dei file.

Qualsiasi aiuto?

Ho il seguente codice nel mio profilo .bashrc e / etc /

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

1
Innanzitutto, controlla se root e gli altri utenti hanno la stessa shell. Altrimenti, questo è il motivo del diverso comportamento. Altrimenti, prova questo: 'apt-cache --no-generate pkgnames "wicd"'. Funziona? Questo è ciò che Bash usa per generare il completamento di 'apt-get install wicd [TAB]'.
angus,

Entrambi usano lo stesso guscio, bash. il comando apt-cache che mi hai dato funziona e mostra un elenco di tutti i pacchetti wicd. Inoltre, quello che ho scoperto è quando il mio computer si avvia per la prima volta e accedo per la prima volta alla shell (non ho un login gui), il completamento automatico di apt-get funzionerà con qualsiasi account. Ma se eseguo il mio window manager fvwm-crystal con startx, quindi apro un terminale, non funzionerà di nuovo solo con il mio account utente. Funziona ancora con root in fvwm-crystal.
Dennis Linuz,

OK, questo è ciò che può succedere. / etc / profile e .bash_profile vengono eseguiti su shell di login. Cioè, quando accedi alla console o quando esegui "su". Poiché in questi casi il completamento funziona, / etc / profile funziona. Ciò che rimane è ~ / .bashrc. Controlla che la riga ". / etc / bash_completion 'viene davvero eseguito. Metti qualcosa come 'echo OK' prima di esso, apri un nuovo terminale e controlla che dice 'OK'.
angus,

hai mai provato ZSH?
Mohammad Efazati,

Il tuo .bashrc potrebbe essere completamente mancante; questo era il mio caso
Galvani,

Risposte:


6

Il tuo /etc/bash_completionfile deve mancare.

sudo apt-get install bash-completion

dovrebbe risolvere tutti i tuoi problemi.

Dato che hai già commentato le righe /etc/bash.bashrccome Faheem Mitha e altri hanno sottolineato, ora dovrebbe funzionare:

# enable bash completion in interactive shells
if [ -f /etc/bash_completion ] && ! shopt -oq posix; then
    . /etc/bash_completion
fi

Motivo: il bash-completionpacchetto ora ha quel file (/ etc / bash_completion). Una volta era nel bashpacchetto, ma non più.

informazioni sulla modifica del pacchetto


cosa dovrebbe essere nel file / etc / bash_completion ? Ho eseguito il comando install bash-completamento e tutto è già l'ultima versione ma il mio file di completamento bash è vuoto
fifamaniac04

2

Prova a eseguire questo:

chsh -s /bin/bash $USER

1

Non riesco a ricordare se questo è necessario, ma provo a decommentare le righe corrispondenti da /etc/bash.bashrcse non sono già state decommentate, vale a dire

# enable bash completion in interactive shells
if [ -f /etc/bash_completion ] && ! shopt -oq posix; then
    . /etc/bash_completion
fi

0

Come ricordo, il completamento automatico di bash per i parametri di comando viene eseguito tramite il completecomando. Dovresti avere uno script di completamento apt-get caricato dall'utente root bashrc (forse /root/.bashrc), quindi hai bisogno del login root per eseguirlo. Sudo non carica script di login di root, ti dà solo privilegi.

Forse ti manca lo script di completamento automatico per utenti non root, quindi non hanno il completamento automatico di bash configurato per apt-get. Se questo è vero, carica quelle funzioni per gli utenti che hanno TUTTI i privilegi all'interno del file sudoers.

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.