Автозаполнение не работает при входе в систему как root

23

Я только что столкнулся с чем-то, что действительно беспокоит меня. Автозаполнение в Ubuntu работает как чудо, но когда я вхожу в систему как root, например, suя получаю tabавтозаполнение только иногда.

Почему это работает, как это? Можно ли изменить это?

Patryk
источник
Вы на самом деле войти в систему как корень, или используя Sudo су?
Марти Фрид
@MartyFried Да, я Дионг sudo su. В чем разница?
Патрик
Кажется, это работает для меня, можете ли вы предоставить нам конкретный случай, когда он не работает, что-то, что мы можем воспроизвести.
ste_kwr
1
@lordmonkey: Может быть, нет, я не совсем уверен. Я думаю , что су или Sudo су сама по себе немного отличается каким - то образом , что я не помню, так что я хотел , чтобы убедиться , что я мог бы проверить это в тех же условиях. Похоже , что это работает, но вы сказали , «иногда», так что я могу только предложить вам перепроверить и попытаться сделать его воспроизводимой, или просто убедитесь , что это не что - то еще происходит , что дурачит вас - то есть, ошибка пользователя - эй, с кем не бывает! :)
Marty Fried

Ответы:

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.
Peregring-лк
7

Вы не упомянули, какую версию Ubuntu вы используете.

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

    sudo apt-get install bash-completion
  • Шахта работает, если я логин с помощью: sudo -i

Саввас Радевич
источник
Что такое точка удаления .bashrc суперпользователя?
гейра
Я думаю , что это будет регенерировать .bashrc по умолчанию при следующем входе в систему выхода из системы /. Или, возможно, он может содержать некоторую «деактивацию» для автозаполнения (не знаю, возможно ли это). Я не могу вспомнить фактическую причину, я записал это все же.
Саввас Радевич
2
Нет, новый .bashrcне будет создан и /etc/bash_completionне будет получен, будет доступно только завершение bash по умолчанию.
гейра
ОК, отредактировано и удалено. Спасибо за ваш вклад! Хотя мне интересно, может ли ~ / .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

Они могут быть прокомментированы. Без комментариев их работает.

dbtek
источник
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

Сохранено, и все заработало просто отлично.

Надеюсь, это кому-нибудь поможет.

neanderslob
источник
0

В Linux Mint 18 (основано на дружественный), вы должны изменить 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

Вот и все.

ле Hollandais Волант
источник