Il completamento automatico non funziona mentre si è registrati come root


23

Mi sono appena imbattuto in qualcosa che mi dà davvero fastidio. Il completamento automatico su Ubuntu funziona come un incantesimo, ma quando accedo come root, ad esempio, suottengo il tabcompletamento automatico solo a volte.

Perché funziona così? Si può cambiarlo?


Stai effettivamente accedendo come root o usando sudo su?
Marty Fried,

@MartyFried Sì, sono Diong sudo su. Qual è la differenza?
Patryk,

Sembra funzionare per me, puoi fornirci un'istanza specifica di quando non funziona, qualcosa che possiamo replicare.
ste_kwr,

1
@lordmonkey: forse nessuno, non ne sono davvero sicuro. Penso che su o sudo su da soli siano un po 'diversi in un modo che non ricordo, quindi volevo assicurarmi di poterlo controllare nelle stesse condizioni. Sembra che funzioni, ma hai detto "a volte", quindi posso solo suggerirti di ricontrollare e provare a renderlo riproducibile, o semplicemente assicurarmi che non ci sia qualcos'altro che ti stia prendendo in giro - ovvero, errore utente - hey, succede a tutti! :)
Marty Fried,

Risposte:


41

Controlla il tuo /root/.bashrcfile per queste righe

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

Se non esistono, aggiungili alla fine del file usando il tuo editor di testo preferito.


Il mio .bashrc conteneva le righe menzionate ma sono state commentate; decommenta le linee e acquista il nuovo .bashrc; le cose sembrano piuttosto buone ora.
Ankit

La bash_completionriga, almeno nel mio caso, è stata commentata, perché afferma che bash_completionè già abilitata /etc/bash.bashrc, ma quel file ha anche quelle righe commentate. Invece di decommentare il etcfile, è meglio decommentare la riga /root/.bashrc.
Peregring-lk,

7

Non hai menzionato quale versione di Ubuntu usi.

  • Verifica se il bash-completionpacchetto è installato:

    sudo apt-get install bash-completion
  • Il mio funziona se accedo usando: sudo -i


Qual è lo scopo di rimuovere il .bashrc di root?
geirha,

Penso che rigenererà il .bashrc predefinito al successivo logout / login. O forse potrebbe contenere una sorta di "disattivazione" per il completamento automatico (non so se è possibile). Non ricordo però il vero motivo per cui l'ho scritto.
Savvas Radevic,

2
No, .bashrcnon verrà creato un nuovo e /etc/bash_completionnon verrà fornito, sarà disponibile solo il completamento predefinito di bash.
geirha,

OK, modificato e rimosso. Grazie per il tuo contributo! Anche se mi chiedo se ~ / .bashrc possa "estrarre" un file o se disable-completionsia ancora disponibile: superuser.com/questions/37148/…
Savvas Radevic,

3

Per Ubuntu 13.10, controllare /etc/bash.bashrcper

# 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

Potrebbero essere commentati. Annulla commento li funziona.


0

Trovato che ha funzionato (simile alle risposte sopra ma con una svolta)

Il file che deve essere modificato (almeno nel mio caso con 12.04) era /root/.bashrc. Questo ha senso nel mio caso, dato che il mio utente normale si stava completando automaticamente, ma la mia radice no.

Comunque in detto file ho trovato tutto il codice necessario ma è stato commentato:

# enable programmable completion features (you don't need to enable
# this, if it's already enabled in /etc/bash.bashrc and /etc/profile
# sources /etc/bash.bashrc).
#if [ -f /etc/bash_completion ] && ! shopt -oq posix; then
    #. /etc/bash_completion
#fi

Non commentato:

# enable programmable completion features (you don't need to enable
# this, if it's already enabled in /etc/bash.bashrc and /etc/profile
# sources /etc/bash.bashrc).
if [ -f /etc/bash_completion ] && ! shopt -oq posix; then
    . /etc/bash_completion
fi

Salvato, e ha funzionato bene.

Spero che questo aiuti qualcuno.


0

In Linux Mint 18 (basato su Xenial), devi modificare il tuo bashrc:

sudo nano /etc/bash.bashrc

e commentare (rimuovere il #davanti a ciascuna riga) questa sezione:

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

È tutto.

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.