O preenchimento automático não funciona enquanto estiver logado como root

23

Acabei de encontrar algo que realmente está me incomodando. O preenchimento automático no ubuntu funciona como um encanto, mas quando entro como root, por exemplo su, recebo o tabpreenchimento automático apenas algumas vezes.

Por que funciona assim? Alguém pode mudar isso?

Patryk
fonte
Você está realmente fazendo login como root ou usando o sudo su?
Marty Fried
@MartyFried Sim, eu sou diong sudo su. Qual é a diferença?
Patryk
Parece funcionar para mim, você pode nos fornecer uma instância específica de quando não funciona, algo que podemos replicar.
211312 ste_kwr
1
@ Lordmonkey: Talvez nenhum, eu não tenho certeza. Eu acho que su ou sudo su por si só é um pouco diferente de alguma forma que não me lembro, então eu queria ter certeza de que poderia verificar isso nas mesmas condições. Parece que funciona, mas você disse "às vezes", então só posso sugerir que você verifique duas vezes e tente torná-lo reproduzível, ou apenas certifique-se de que não aconteça outra coisa que esteja enganando você (por exemplo, erro do usuário). isso acontece com todos! :)
Marty Fried

Respostas:

41

Verifique seu /root/.bashrcarquivo para estas linhas

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

Se eles não existirem, adicione-os ao final do arquivo usando seu editor de texto favorito.

Bruno Pereira
fonte
O meu .bashrc continha as linhas mencionadas, mas elas foram comentadas; descomentou as linhas e adquiriu o novo .bashrc; as coisas parecem muito boas agora.
Ankit
A bash_completionlinha, pelo menos no meu caso, foi comentada, porque afirma que a bash_completionjá está ativada /etc/bash.bashrc, mas esse arquivo também possui as linhas comentadas. Em vez de descomentar o etcarquivo, é melhor descomentar a linha /root/.bashrc.
Peregring-lk
7

Você não mencionou qual versão do Ubuntu você usa.

  • Verifique se você tem o bash-completionpacote instalado:

    sudo apt-get install bash-completion
  • O meu funciona se eu fizer login usando: sudo -i

Savvas Radevic
fonte
Qual é o sentido de remover o .bashrc da raiz?
Geirha #
Eu acho que ele irá regenerar o padrão .bashrc no próximo logout / login. Ou talvez ele contenha algum tipo de "desativação" para o preenchimento automático (não sei se é possível). Não me lembro do motivo real pelo qual escrevi.
Savvas Radevic
2
Não, um novo .bashrcnão será criado e /etc/bash_completionnão será fornecido, apenas a conclusão padrão do bash estará disponível.
geirha
OK, editado e removido. Obrigdo por sua contribuição! Embora eu me pergunto se ~ / .bashrc pode "unsource" um arquivo ou se disable-completionainda está disponível: superuser.com/questions/37148/...
Savvas Radevic
3

Para o Ubuntu 13.10, verifique /etc/bash.bashrcpara

# 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

Eles podem ser comentados. Sem comentar eles funciona.

dbtek
fonte
0

Constatou que isso funcionou (semelhante às respostas acima, mas com uma reviravolta)

O arquivo que precisa ser editado (pelo menos no meu caso com o 12.04) era /root/.bashrc. Isso faz sentido no meu caso, já que meu usuário comum estava completando automaticamente, mas minha raiz não.

De qualquer forma, no referido arquivo, encontrei todo o código necessário, mas ele foi comentado:

# 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

Apenas não comentou:

# 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

Salvo, e funcionou muito bem.

Espero que isso ajude alguém.

neanderslob
fonte
0

No Linux Mint 18 (baseado no Xenial), você precisa editar seu bashrc:

sudo nano /etc/bash.bashrc

e comente (remova a #frente de cada linha) esta seção:

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

Isso é tudo.

le hollandais volant
fonte