Автозавершення не працює під час реєстрації як root


23

Я щойно натрапив на щось, що нас справді турбує. Автозавершення ubuntu працює як шарм, але коли я входжу як root, наприклад, suя отримую tabавтозавершення лише іноді.

Чому це працює так? Чи можна це змінити?


Ви фактично входите в систему як root або використовуєте sudo su?
Марті Фрід

@MartyFried Так, я діонг sudo su. Яка різниця?
Патрик

Здається, це працює для мене, чи можете ви надати нам конкретний екземпляр, коли він не працює, щось, що ми можемо повторити.
ste_kwr

1
@lordmonkey: Можливо, ніхто, я не дуже впевнений. Я думаю, що su або sudo su по собі дещо відрізняється певним чином, що я не пам’ятаю, тому хотів переконатися, що я можу перевірити це за тих самих умов. Здається, це працює, але ви сказали "інколи", тому я можу запропонувати вам лише двічі перевірити і спробувати зробити його відтворюваним або просто переконатися, що не відбувається щось інше, що вас обманює - тобто, помилка користувача - ей, це трапляється з усіма! :)
Марті Фрід

Відповіді:


41

Перевірте /root/.bashrcфайл у цих рядках

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

Якщо їх немає, додайте їх у кінець файлу за допомогою улюбленого текстового редактора.


Шахта .bashrc містила згадані рядки, але вони були прокоментовані; прокоментував рядки та вивів новий .bashrc; речі зараз виглядають досить добре.
Анкіт

bash_completionЛінія, по крайней мере , в моєму випадку, були закоментований, тому що він стверджує , що bash_completionвже включений в /etc/bash.bashrc, але цей файл має також , що лінії закоментований. Замість того, щоб коментувати etcфайл, краще коментувати рядок у /root/.bashrc.
Перерегінг-лк

7

Ви не згадали, яку версію Ubuntu використовуєте.

  • Перевірте, чи bash-completionвстановлений пакет:

    sudo apt-get install bash-completion
  • Шахта працює, якщо я входжу за допомогою: sudo -i


Який сенс видалити .bashrc кореня?
geirha

Я думаю, що це відновить типовий .bashrc при наступному виході / вході. А може, це може містити якусь "деактивацію" для автоматичного завершення (не знаю, чи можливо). Я не можу пригадати справжню причину, хоча я це записав.
Савас Радевич

2
Ні, нове .bashrcне буде створено та /etc/bash_completionне буде доступне, доступне лише завершення за замовчуванням Bash.
geirha

Гаразд, відредаговано та видалено. Дякую за Ваш внесок! Хоча мені цікаво, чи ~ / .bashrc може "видалити" файл чи disable-completionвін ще доступний: superuser.com/questions/37148/…
Савас Радевич,

3

Для Ubuntu 13.10, перевірте /etc/bash.bashrcна

# 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

Вони можуть прокоментуватися. Не коментуючи їх, працює.


0

Виявив, що це спрацювало (схоже на відповіді вище, але з поворотом)

Файл, який потрібно відредагувати (принаймні в моєму випадку з 12.04), був /root/.bashrc. Це має сенс у моєму випадку, враховуючи, що мій постійний користувач автоматично закінчував автозавершення, але корінь не був.

У будь-якому файлі я знайшов весь необхідний код, але його прокоментували:

# 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

Просто скаментуйте це:

# 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

Збережено, і це спрацювало чудово.

Сподіваюся, що це комусь допоможе.


0

У Linux Mint 18 (на основі Xenial) ви повинні відредагувати bashrc:

sudo nano /etc/bash.bashrc

і прокоментуйте (видаліть #перед кожним рядком) цей розділ:

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

Це все.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.