LINUX.ORG.RU

Оптимизация работы с SSH с помощью bash-completion


0

0

Bash-completion это очень интересная особенность последних версий оболочки bash. Она позволяет создавать свои, настраиваемые схемы автодополнения команд.

SSH это протокол, позволяющий управлять удалённой системой и передавать файлы. Является стандартом де-факто для удалённого администрирования *nix-серверов.

Все привыкли что если в приглашении bash набрать ssh и два раза нажать клавишу - будет отображён список файлов в текущем каталоге. Однако было бы гораздо удобнее если бы вместо файлов в текущем каталоге перечислялись часто используемые хосты. Вот тут и пригодится наличие возможности программировать автодополнение в bash.

Заметка не описывает все тонкости реализации, а скорее просто даёт идею. Заодно демонстрируя основы программирования bash_completion.

>>> Подробности

★★★★

Проверено: Shaman007 ()

MooSE, за интересные статьи респект!

anonymous
()
Ответ на: комментарий от marsijanin

Оно везде работает из коробки. Новость походу дела валялась лет пять, прежде чем ее подхватил чей-то зоркий глаз.

anonymous
()

source /etc/bash_completion и не надо изобретать велосипед

swar0g ★★★★
()
Ответ на: комментарий от anonymous

$ dpkg -S /etc/bash_completion
bash: /etc/bash_completion

anonymous
()

Скажите, а можно ли сделать так, чтобы bash по нажатии TAB подставлял варианты в том числе и из bash_history?

ogion ★★
()
Ответ на: комментарий от anonymous

> Он и так их подставляет, правда при нажатии Ctrl-R.

пэйдж ап, пэйдж даун

anonymous
()
Ответ на: комментарий от marsijanin

> А в zsh оно, как и многое друге "искаробки"

Только ресурсов zsh хавает много больше, так что, увы и ах, но в Бабруйск.

Bircoph
()
Ответ на: комментарий от Bircoph

В "Бабруйск" направляешься ты, со свой Целкой или P-II ;)

anonymous
()
Ответ на: комментарий от Bircoph

> Только ресурсов zsh хавает много больше...

Насколько намного?

Lumi ★★★★★
()

В дебе работает искаробки как и с многими другими программами

Arceny ★★
()
Ответ на: комментарий от Bircoph

> Только ресурсов zsh хавает много больше, так что, увы и ах, но в Бабруйск.

Это опять-таки случай так называемого вранья. У меня zsh ест два-три мега, а bash - больше пяти, да ещё и стартует ощутимо дольше. Вдобавок, bash-completion тормозит ощутимо сильнее zsh-completion, а умеет меньше.

ero-sennin ★★
()
Ответ на: комментарий от ero-sennin

А мой писюн-шелл все равно больше!

anonymous
()

ну блин и инновация, слов нет. долой такие новости.

warl0ck ★★
()

В общем-то старо, практически во всех дистрибутивах bash_completion уже настроен на дополнение хостов как для ssh, так и для scp.

guitarist ★★
()
Ответ на: комментарий от ero-sennin

не забывай, зш - под столманонеугодной лицензией

anonymous
()

Кстати, а bash уже научился компилировать и хранить свои скрипты в каком-нить промежуточном формате, чтобы загрузка мегабайтного .profile и completions на все случаи жизни занимала не десятки секунд, а доли секунды?

execve
()
Ответ на: комментарий от guitarist

> В общем-то старо, практически во всех дистрибутивах bash_completion уже настроен на дополнение хостов как для ssh, так и для scp.

А не подскажете, откуда он берёт список хостов?

ogion ★★
()
Ответ на: комментарий от ogion

> А не подскажете, откуда он берёт список хостов? libastral.so?

schakal
()
Ответ на: комментарий от firsttimeuser

> ~/.ssh/known_hosts ?

Там храняться только имена хостов. А иногда ещё нужно явно указать имя пользователя. Так что не рулит такой способ:)

MooSE ★★★★
() автор топика

класс!

anonymous
()

[:]||||||||||||||||[:]

Ex ★★
()

Ну вот. Отличная статья.

anonymous
()
Ответ на: комментарий от MooSE

то что у меня по умолчанию в федоре настроено не ассоциирует имя с хостом. После

ssh username@ <Tab>

bash-completion лепит все к чему я когда либо коннектился, не важно под каким юзеонеймом.

firsttimeuser ★★★★★
()

но ssh/scp это дело третье. Все строки в истории баша. Меня не обламывает поискать через <ctrl>+R. Больше интересует как список расширений ассоциированных с бинарниками редактировать. А то скудность списка для mplayer изрядно раздражает.

firsttimeuser ★★★★★
()
Ответ на: комментарий от alx_me

> А вот и жабасты подтянулись. Нет, jit тут нет. И да java-sux - недо'с' пере'bash'.

Спасибо за информацию, я почему-то и не сомневался.

А в zsh это есть.

execve
()
Ответ на: комментарий от firsttimeuser

> но ssh/scp это дело третье. Все строки в истории баша. Меня не обламывает поискать через <ctrl>+R.

Тут немного другое.

scp host:/path/to/something/<Tab>

показывает (и позволяет подставить) список файлов в каталоге /path/to/something на хосте host. Такое никакой историей не заменишь.

execve
()

o bozhe moj. ja eto nastroil v 1997 v zsh. s tex por rabotaet, razve toko popravil kogda na openssh pereshjol -- oni format known_hosts pomenjali :)

anonymous
()
Ответ на: комментарий от MooSE

> > ~/.ssh/known_hosts ?

Именно,

> Там храняться только имена хостов. А иногда ещё нужно явно указать
> имя пользователя. Так что не рулит такой способ:)

Пишем ssh user@ho<tab>, bash дополняет до user@host.domain.

guitarist ★★
()

Мдя... И как у меня баш дополнял хосты из .ssh/known_hosts ?
Правда, там были именно хосты тогда, а не хэши.

stanislav
()
Ответ на: комментарий от guitarist

Кроме этого us<tab> тоже работает. И плюс к этому чушутся общий known_hosts в /etc/

anonymous
()

а какие стандартные способы включения есть для слаки?

cvv ★★★★★
()

Ну... вообще-то, как вяснилось, стандартный bash_completion вполне умеет работать с ssh http://www.caliban.org/bash/index.shtml#completion_starting Он умеет брать имена хостов и ~/.ssh/known_hosts Единсвенное что нужно в /etc/ssh/ssh_config поставить HashKnownHosts no чтобы имена хостов не хранились в хешированном виде. И вперед! Вот допилить бы его до состояния когда он берет имена из ~/.bash_history и /etc/hosts вот это было бы полезно.

shaplov ★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.