Autouzupełnianie nie działa, gdy jest zalogowany jako root

23

Właśnie natrafiłem na coś, co mnie naprawdę niepokoi. Autouzupełnianie na Ubuntu działa jak urok, ale kiedy loguję się jako root, np. suDostaję tabautouzupełnianie tylko czasami.

Dlaczego tak to działa? Czy można to zmienić?

Patryk
źródło
Czy faktycznie logujesz się jako root lub używasz sudo su?
Marty Fried
@MartyFried Tak Jestem diong sudo su. Jaka jest różnica?
Patryk
Wydaje mi się, że to działa, czy możesz podać nam konkretny przypadek, kiedy to nie działa, co możemy powtórzyć.
ste_kwr
1
@lordmonkey: Może nie, nie jestem do końca pewien. Myślę, że su lub sudo su samo w sobie jest trochę inne, czego nie pamiętam, więc chciałem się upewnić, że mogę to sprawdzić w tych samych warunkach. Wygląda na to, że działa, ale powiedziałeś „czasami”, więc mogę tylko zasugerować, abyś dwukrotnie sprawdził i spróbował sprawić, by był odtwarzalny, lub po prostu upewnij się, że nie dzieje się coś innego, co Cię oszuka - tj. Błąd użytkownika - hej, zdarza się wszystkim! :)
Marty Fried

Odpowiedzi:

41

Sprawdź /root/.bashrcplik pod kątem tych linii

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

Jeśli nie istnieją, dodaj je na końcu pliku, używając ulubionego edytora tekstu.

Bruno Pereira
źródło
Mój .bashrc zawierał wspomniane wiersze, ale zostały skomentowane; odkomentował wiersze i pozyskał nowy plik .bashrc; teraz wszystko wygląda całkiem dobrze.
Ankit,
bash_completionLinia, przynajmniej w moim przypadku, komentowano na zewnątrz, ponieważ twierdzi, że bash_completionjest już włączony /etc/bash.bashrc, ale że plik ma również, że linie wykomentowane. Zamiast odkomentować etcplik, lepiej jest odkomentować linię w /root/.bashrc.
Peregring-lk
7

Nie wspomniałeś, z której wersji Ubuntu korzystasz.

  • Sprawdź, czy masz bash-completionzainstalowany pakiet:

    sudo apt-get install bash-completion
  • Mój działa, jeśli zaloguję się przy użyciu: sudo -i

Savvas Radevic
źródło
Po co usuwać .bashrc roota?
geirha
Myślę, że przy następnym wylogowaniu / zalogowaniu się zregeneruje domyślny plik .bashrc. A może może zawierać pewnego rodzaju „dezaktywację” do autouzupełniania (nie wiem, czy to możliwe). Nie pamiętam jednak faktycznego powodu, dla którego to spisałem.
Savvas Radevic
2
Nie, nowe .bashrcnie zostaną utworzone i /etc/bash_completionnie będą pozyskiwane, dostępne będzie tylko domyślne zakończenie bash.
geirha
OK, edytowane i usunięte. Dziękujemy za Twój wkład! Chociaż zastanawiam się, czy ~ / .bashrc może „cofnąć źródło” pliku, czy disable-completionjest nadal dostępny: superuser.com/questions/37148/…
Savvas Radevic
3

Dla Ubuntu 13.10, sprawdź /etc/bash.bashrcna

# 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

Mogą być komentowane. Odznaczenie ich działa.

dbtek
źródło
0

Okazało się, że to zadziałało (podobnie do powyższych odpowiedzi, ale z pewnym zaskoczeniem)

Plik, który należy edytować (przynajmniej w moim przypadku z 12.04) to /root/.bashrc. Ma to sens w moim przypadku, biorąc pod uwagę, że mój zwykły użytkownik automatycznie wypełniał się automatycznie, ale mój root nie.

W każdym razie we wspomnianym pliku znalazłem cały niezbędny kod, ale został on skomentowany:

# 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

Po prostu nie skomentowałem:

# 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

Zapisano i działało dobrze.

Mam nadzieję, że to komuś pomoże.

neanderslob
źródło
0

W Linux Mint 18 (opartym na Xenial) musisz edytować bashrc:

sudo nano /etc/bash.bashrc

i skomentuj (usuń z #przodu każdej linii) tę sekcję:

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

To wszystko.

le hollandais volant
źródło