bash-completion или волшебный TAB

Долгое время мне не хватало полноценного автодополнения по нажатию TAB.
Например когда надо найти/установить пакет, и не помнишь его полного имени,или долго набирать это имя, можно искать с помощью eix, emerge -s, или просматривать с помощью ls дерево portege. Все это не всегда подходит, а запускать постояно команда --help если вдруг подзабыл, для того что бы вспомнить нужный параметр тоже не айс. И тут нам на помощь приходит bash-completion, что бы сделать нашу жизнь веселей и краше, с его помощью можно дополнять не только команды и пути, а так же ключи опции, имена пакетов используя emerge, благо в Calculate все что нужно сделать для его работы, так это добавить нужную строчку в нужный файл и перезапустить консоль.
У кого нету, создаем файл ~/.bashrc, в директории пользователя и директории root:(в связи с добавленными комментариями, делать этого не нужно,все оказалось гораздо проще)

touch ~/.bashrc
echo "[[ -f /etc/profile.d/bash-completion.sh ]] && source /etc/profile.d/bash-completion.sh" >> ~/.bashrc
cp ~/.bashrc /root/.bashrc

если не нравится этот вариант, то можно сделать иначе, для всех пользователей:(и тут в связи с добавленными комментариями, делать этого не нужно,все оказалось гораздо проще)

echo "[[ -f /etc/profile.d/bash-completion.sh ]] && source /etc/profile.d/bash-completion.sh" >> /etc/bash/bashrc

Правильно будет включить через eselect,
Полный список:

eselect bashcomp list

Затем включаете то, что нужно:

 eselect bashcomp enable <номера нужных дополнений>

Для глобальной bashcomp:

for i in $(ls --color=no /usr/share/bash-completion/); do eselect bashcomp enable --global $i; done

После чего делаем:

env-update && source /etc/profile

Проверяем что у нас получилось…

emerge ese<tab><tab>
kill <tab><tab>
killall -<tab><tab>
chown <tab><tab>
chown -<tab><tab>
chgrp <tab><tab>
chgrp -<tab><tab>
rc-update <tab><tab>
rc-update -<tab><tab>
rc-status <tab><tab>
rc-status -<tab><tab>
eselect <tab><tab>

В общем всем все понятно, пользуемся, радуемся. Кому есть что добавить, пожалуйста.

P.S. Спасибо за комментарии Anton Chernyshov я упустил написать eselect bashcomp enable <номера нужных дополнений>, а так же Rosen Alexandrow за красивое решение for i in $(ls --color=no /usr/share/bash-completion/); do eselect bashcomp enable --global $i; done
P.P.S Можно смело сказать что данный пост написан в соавторстве с Anton Chernyshov и Rosen Alexandrow… Товарищи однопартийцы! БОЛЬШОЕ ВАМ СПАСИБО, за поправки!

Зачем так сложно? После установки пакета bash-completion отдельные автодополнения включаются через eselect. Полный список:
eselect bashcomp list

Затем включаете то, что нужно:
eselect bashcomp enable <номера нужных дополнений>

for i in $(ls --color=no /usr/share/bash-completion/); do eselect bashcomp enable --global $i; done

Для глобальной bashcomp

Rosen Alexandrow писал(а):

for i in $(ls --color=no /usr/share/bash-completion/); do eselect bashcomp enable --global $i; done

Для глобальной bashcomp

for i in $(ls --color=no /usr/share/bash-completion/); do eselect bashcomp enable --global $i; done
!!! Error: abook is already installed
!!! Error: ant is already installed
!!! Error: apache2ctl is already installed
!!! Error: apt is already installed
!!! Error: apt-build is already installed
^C
уже установлен, но работает только после добавления source /etc/profile.d/bash-completion.sh в ~/.bashrc

P.S. Спасибо за красивое решение - for i in $(ls --color=no /usr/share/bash-completion/); do eselect bashcomp enable --global $i; done

Anton Chernyshov писал(а):

Зачем так сложно? После установки пакета bash-completion отдельные автодополнения включаются через eselect. Полный список:
eselect bashcomp list

Затем включаете то, что нужно:
eselect bashcomp enable <номера нужных дополнений>

Да в man так и написано, вот только не работает если не добавить в ~/.bashrc строчку source /etc/profile.d/bash-completion.sh:(

Алексей Васильевич писал(а):

Anton Chernyshov писал(а):

Зачем так сложно? После установки пакета bash-completion отдельные автодополнения включаются через eselect. Полный список:
eselect bashcomp list

Затем включаете то, что нужно:
eselect bashcomp enable <номера нужных дополнений>

Да в man так и написано, вот только не работает если не добавить в ~/.bashrc строчку source /etc/profile.d/bash-completion.sh:(

Еще как работает. Только не сразу. Если хотите, чтоб сразу заработало после eselect, то надо сделать: env-update && source /etc/profile

Anton Chernyshov писал(а):

Алексей Васильевич писал(а):

Anton Chernyshov писал(а):

Зачем так сложно? После установки пакета bash-completion отдельные автодополнения включаются через eselect. Полный список:
eselect bashcomp list

Затем включаете то, что нужно:
eselect bashcomp enable <номера нужных дополнений>

Да в man так и написано, вот только не работает если не добавить в ~/.bashrc строчку source /etc/profile.d/bash-completion.sh:(

Еще как работает. Только не сразу. Если хотите, чтоб сразу заработало после eselect, то надо сделать: env-update && source /etc/profile

Спасибо за Ваши дополнения, действительно работает :$… ну таки пост оставлю, не буду удалять,кто комментарии прочтет,во всем разберется…

Алексей Васильевич писал(а):

Спасибо за Ваши дополнения, действительно работает :$… ну таки пост оставлю, не буду удалять,кто комментарии прочтет,во всем разберется…

Всегда пожалуйста!

Я юзал zsh и zsh-completion

Есть вопрос - а это не тормозит отзывчивость bash-а?
По работе приходится иметь дело в т.ч. и с убунтой, там по умолчанию bashcompletion в полном объеме включен, так вот, там bash жутко тормозной.

Михаил Гагауз писал(а):

Есть вопрос - а это не тормозит отзывчивость bash-а?
По работе приходится иметь дело в т.ч. и с убунтой, там по умолчанию bashcompletion в полном объеме включен, так вот, там bash жутко тормозной.

У меня явных тормозов замечено не было…

Вот только хочу заметить,что вариант ,без изменения bashrc, у меня, все же не работает после перезапуска консоли, вот такие дела…
мои действия:

for i in $(ls --color=no /usr/share/bash-completion/); do eselect bashcomp enable --global $i; done

env-update && source /etc/profile