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ć?


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.


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


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.


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.


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.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.