bash: автодополнение (небольшое улучшение)
Модератор: Модераторы разделов
bash: автодополнение
2 moderator: кажется, этот вопрос не поднимался (по крайней мере поиск не дал результатов). если это не так - топик можно смело удалять :)
как сделать так, чтобы bash при нажатии tab не выводил список возможных вариантов, а сразу подставлял их в командную строку
надеюсь, всем знакомо поведение bash по умалчанию, когда после ввода, например
$ pin
и нажатия клавиши tab выводится список возможных вариантов и вновь повторяется командная строка с набранными тремя буквами команды:
$ pin
pinfo ping ping6 pinky
$ pin
(у Вас список может отличаться).
а было бы совсем неплохо, если бы после нажатия tab в командной строке появилась бы первая из команд (pinfo), повторное нажатие tab заменило бы pinfo на ping, третье - на ping6 и т.д.
(замечу здесь, что таким поведением по умолчанию обладает, например, zsh).
научить bash данному "трюку" не просто, а очень просто :)
вариант 1 - для всех пользователей
войдя в систему как суперпользователь root, отредактируйте файл /etc/inputrc, добавив в его конце строку:
TAB: menu-complete
вариант 2 - для одного пользователя
если по каким-то причинам Вы не можете/не хотите вносить изменения в общесистемный файл /etc/inputrc, можно вышеописанные манипуляции проделать с файлом ~/.inputrc. если такого файла нет в Вашем домашнем каталоге - смело создавайте новый :)
следует заметить, что обычно программой readline (которая, собственно, и обрабатывает ввод в командной строке) прочитываются оба инициализационных файла (и /etc/inputrc и ~/.inputrc), но только если не определена переменная окружения INPUTRC. в этом случае считывается только тот файл, на который она (переменная) указывает. узнать, определена ли эта переменная, и что в ней находится, можно с помощью команды
$ echo $INPUTRC
если Вы не администратор системы, а рядовой пользователь и администратором установлено значение для INPUTRC, например /etc/inputrc, то можно поступить следующим способом:
1. отредактируйте ~/.inputrc как описано выше.
3. в конце файла ~/.bash_profile добавьте строку
unset INPUTRC
удачи! будут вопросы - задавайте их на форуме или мне лично arizona2001@mail.ru
© alexander barakin aka sash kan
как сделать так, чтобы bash при нажатии tab не выводил список возможных вариантов, а сразу подставлял их в командную строку
надеюсь, всем знакомо поведение bash по умалчанию, когда после ввода, например
$ pin
и нажатия клавиши tab выводится список возможных вариантов и вновь повторяется командная строка с набранными тремя буквами команды:
$ pin
pinfo ping ping6 pinky
$ pin
(у Вас список может отличаться).
а было бы совсем неплохо, если бы после нажатия tab в командной строке появилась бы первая из команд (pinfo), повторное нажатие tab заменило бы pinfo на ping, третье - на ping6 и т.д.
(замечу здесь, что таким поведением по умолчанию обладает, например, zsh).
научить bash данному "трюку" не просто, а очень просто :)
вариант 1 - для всех пользователей
войдя в систему как суперпользователь root, отредактируйте файл /etc/inputrc, добавив в его конце строку:
TAB: menu-complete
вариант 2 - для одного пользователя
если по каким-то причинам Вы не можете/не хотите вносить изменения в общесистемный файл /etc/inputrc, можно вышеописанные манипуляции проделать с файлом ~/.inputrc. если такого файла нет в Вашем домашнем каталоге - смело создавайте новый :)
следует заметить, что обычно программой readline (которая, собственно, и обрабатывает ввод в командной строке) прочитываются оба инициализационных файла (и /etc/inputrc и ~/.inputrc), но только если не определена переменная окружения INPUTRC. в этом случае считывается только тот файл, на который она (переменная) указывает. узнать, определена ли эта переменная, и что в ней находится, можно с помощью команды
$ echo $INPUTRC
если Вы не администратор системы, а рядовой пользователь и администратором установлено значение для INPUTRC, например /etc/inputrc, то можно поступить следующим способом:
1. отредактируйте ~/.inputrc как описано выше.
3. в конце файла ~/.bash_profile добавьте строку
unset INPUTRC
удачи! будут вопросы - задавайте их на форуме или мне лично arizona2001@mail.ru
© alexander barakin aka sash kan
Писать безграмотно - значит посягать на время людей, к которым мы адресуемся, а потому совершенно недопустимо в правильно организованном обществе. © Щерба Л. В., 1957
при сбоях форума см.блог
при сбоях форума см.блог
Re: bash: автодополнение
(Ехидненько так:-)): а в zsh перебор вариантов по табулятору испокон веков по умолчанию существует:-))
Re: bash: автодополнение
Так об этом было написано.(alv @ Пятница, 22 Апреля 2005, 6:46) писал(а):(Ехидненько так:-)): а в zsh перебор вариантов по табулятору испокон веков по умолчанию существует:-))
¡иɯʎdʞ ин ʞɐʞ 'ɐнɔɐdʞǝdu qнεиж
Re: bash: автодополнение
Честно говоря, мне кажется это сомнительным преимуществом.
А если вариантов будет сотни? Да даже пара десятков?
Пример: я примерно помню как называется команда и набираю
$ mk<Tab><Tab>
и мне выводится список из примерно сорока названий. И я сразу (или почти сразу) нахожу то, что мне нужно.
А тут перебирай каждую команду... Да еще и проскочишь ненароком
А если вариантов будет сотни? Да даже пара десятков?
Пример: я примерно помню как называется команда и набираю
$ mk<Tab><Tab>
и мне выводится список из примерно сорока названий. И я сразу (или почти сразу) нахожу то, что мне нужно.
А тут перебирай каждую команду... Да еще и проскочишь ненароком
ArchLinux / IceWM
Re: bash: автодополнение
(ехидненько так :)
нет, конечно, работы по уникодизации zsh'а конечно начались... только вот когда закончатся?
(более серьезно)
вообще-то где возможно (админство, например), я пользуюсь zsh'ем (спасибо alv'у за великолепную пропаганду :).
а вот рядовому юзеру, сидящему под utf-локалью, да еще с всенепременным стремлением обозвать файлы
по-нашенски - лучше, все-таки bash.
а если прикрутить автодополнение по моему рецепту, так вообще... :)
(вообще серьезно)
протестировал только под fc1 и debian sarge. буду признателен за информацию по (не)удачному внедрению в
других дистрибутивах.
нет, конечно, работы по уникодизации zsh'а конечно начались... только вот когда закончатся?
(более серьезно)
вообще-то где возможно (админство, например), я пользуюсь zsh'ем (спасибо alv'у за великолепную пропаганду :).
а вот рядовому юзеру, сидящему под utf-локалью, да еще с всенепременным стремлением обозвать файлы
по-нашенски - лучше, все-таки bash.
а если прикрутить автодополнение по моему рецепту, так вообще... :)
(вообще серьезно)
протестировал только под fc1 и debian sarge. буду признателен за информацию по (не)удачному внедрению в
других дистрибутивах.
Писать безграмотно - значит посягать на время людей, к которым мы адресуемся, а потому совершенно недопустимо в правильно организованном обществе. © Щерба Л. В., 1957
при сбоях форума см.блог
при сбоях форума см.блог
Re: bash: автодополнение
(Sash Kan @ Пятница, 22 Апреля 2005, 15:54) писал(а):(ехидненько так
нет, конечно, работы по уникодизации zsh'а конечно начались... только вот когда закончатся?
Что есть, то есть. Точнее, чего нет, того нет:-)
Re: bash: автодополнение
Попробовал. Не проникся. Что-то до боли напомнило.. потом дошло -- виндовую cmd Действительно неудобно. А вот если кто подскажет, как сделать, чтобы список вариантов при неединственном варианте выскакивал по первому же табу, а не по второму, -- буду благода.(madskull @ Пятница, 22 Апреля 2005, 10:31) писал(а):Честно говоря, мне кажется это сомнительным преимуществом.
А если вариантов будет сотни? Да даже пара десятков?
Пример: я примерно помню как называется команда и набираю
$ mk<Tab><Tab>
и мне выводится список из примерно сорока названий. И я сразу (или почти сразу) нахожу то, что мне нужно.
А тут перебирай каждую команду... Да еще и проскочишь ненароком
¡иɯʎdʞ ин ʞɐʞ 'ɐнɔɐdʞǝdu qнεиж
Re: bash: автодополнение
(t.t @ Пятница, 22 Апреля 2005, 20:49) писал(а):А вот если кто подскажет, как сделать, чтобы список вариантов при неединственном варианте выскакивал по первому же табу, а не по второму, -- буду благода.
а в чем будет измеряться "благода"? :))
а то вот решение-то есть:
добавить в /etc/inputrc или ~/.inputrc
set show-all-if-ambiguous On
Писать безграмотно - значит посягать на время людей, к которым мы адресуемся, а потому совершенно недопустимо в правильно организованном обществе. © Щерба Л. В., 1957
при сбоях форума см.блог
при сбоях форума см.блог
Re: bash: автодополнение
(t.t @ Пятница, 22 Апреля 2005, 20:49) писал(а):А вот если кто подскажет, как сделать, чтобы список вариантов при неединственном варианте выскакивал по первому же табу, а не по второму, -- буду благода.
А я разве не это имелось ввиду? Значит, недопонял. В zsh - именно так, по первому табу список, по второму - начинается перебор, ИМХО очень удобно. Правда, возможно про умолчание я загнул, м.б. это у меня так - не помню, то ли сам когда-то сделал, то ли из какой-то коллекции dot-файлов скоммуниздил, то ли действительно по дефолту так.
Re: bash: автодополнение
Будете в Киеве -- можно пивом(Sash Kan @ Пятница, 22 Апреля 2005, 21:11) писал(а):а в чем будет измеряться "благода"? )
Ща пропробуем. а может насчёт этого inputrc ман какой есть?(Sash Kan @ Пятница, 22 Апреля 2005, 21:11) писал(а):а то вот решение-то есть:
¡иɯʎdʞ ин ʞɐʞ 'ɐнɔɐdʞǝdu qнεиж
Re: bash: автодополнение
(t.t @ Пятница, 22 Апреля 2005, 21:19) писал(а):Будете в Киеве -- можно пивом :)
пиво не пью, но намек понял :)
(t.t @ Пятница, 22 Апреля 2005, 21:19) писал(а):а может насчёт этого inputrc ман какой есть?
man|info bash|readline
Sash Kan добавил в 22.04.2005 22:30
кстати, мне такой параметр понравился
glob-complete-word
по умолчанию зашит на M-g. но работает только с упомянутым show-all-if-ambiguous On.
позволяет выводить список вариантов по паттерну. типа
$ ls /usr/*o
после этого нажимаю M-g и получаю
$ ls /usr/*o
doc info local
$ ls /usr/
Sash Kan добавил в 22.04.2005 22:46
остапа понесло :)
еще интересный момент.
параметр print-completions-horizontally.
если он включен (On), то список вариантов выводится отсортированным сначала по горизонтали,
а потом уже по вертикали.
при большом списке imho гораздо удобнее находить нужный пункт.
Писать безграмотно - значит посягать на время людей, к которым мы адресуемся, а потому совершенно недопустимо в правильно организованном обществе. © Щерба Л. В., 1957
при сбоях форума см.блог
при сбоях форума см.блог
Re: bash: автодополнение
Значит, сговорились(Sash Kan @ Пятница, 22 Апреля 2005, 21:30) писал(а):пиво не пью, но намек понял
Это я понимаю но по readline есть только man 3, а в info bash я чегой-то заблудился. Ну, подниму опять abs-guide(Sash Kan @ Пятница, 22 Апреля 2005, 21:30) писал(а):man|info bash|readline
¡иɯʎdʞ ин ʞɐʞ 'ɐнɔɐdʞǝdu qнεиж
Re: bash: автодополнение
(t.t @ Пятница, 22 Апреля 2005, 21:47) писал(а):Это я понимаю но по readline есть только man 3, а в info bash я чегой-то заблудился. Ну, подниму опять abs-guide
именно в man 3 readline и смотри. в info bash, по идее, все то же самое плюс специфика. по крайней мере в man bash именно так (это я про debian, в нем info bash вообще нет).
Писать безграмотно - значит посягать на время людей, к которым мы адресуемся, а потому совершенно недопустимо в правильно организованном обществе. © Щерба Л. В., 1957
при сбоях форума см.блог
при сбоях форума см.блог
Re: bash: автодополнение
Да? Мне показалось, там написано -- зависит от реализации. Сонный я. Утром ещё раз гляну.(Sash Kan @ Пятница, 22 Апреля 2005, 22:08) писал(а):именно в man 3 readline и смотри.
Ну как же.. А bash-doc?(Sash Kan @ Пятница, 22 Апреля 2005, 22:08) писал(а):(это я про debian, в нем info bash вообще нет)
¡иɯʎdʞ ин ʞɐʞ 'ɐнɔɐdʞǝdu qнεиж
Re: bash: автодополнение
(t.t @ Пятница, 22 Апреля 2005, 22:14) писал(а):А bash-doc?
подразумевалось - у меня нет :)
мне с головой хватило man'а.
Писать безграмотно - значит посягать на время людей, к которым мы адресуемся, а потому совершенно недопустимо в правильно организованном обществе. © Щерба Л. В., 1957
при сбоях форума см.блог
при сбоях форума см.блог
Re: bash: автодополнение
Не работает под фрей )
Re: bash: автодополнение
(azalio @ Суббота, 23 Апреля 2005, 1:38) писал(а):Не работает под фрей )
т.е. вообще не воспринимается содержимое /etc/inputrc и ~/.inputrc?
или не работает только автодополнение?
p.s. а что, пользователи freebsd тоже bash'ем пользуются? я думал там гегемон - zsh :)
Писать безграмотно - значит посягать на время людей, к которым мы адресуемся, а потому совершенно недопустимо в правильно организованном обществе. © Щерба Л. В., 1957
при сбоях форума см.блог
при сбоях форума см.блог
Re: bash: автодополнение
(Sash Kan @ Суббота, 23 Апреля 2005, 9:54) писал(а):(azalio @ Суббота, 23 Апреля 2005, 1:38) писал(а):Не работает под фрей )
т.е. вообще не воспринимается содержимое /etc/inputrc и ~/.inputrc?
или не работает только автодополнение?
p.s. а что, пользователи freebsd тоже bash'ем пользуются? я думал там гегемон - zsh
Там сплошная демократия, гегемона как класса нету. Но идеологически правильно в BSD пользоваться c-shell'ом:-))
Кстати, интересно, почему не работает. И главное - где? Чисто в консоли - вроде все должно работать. Или в терминальном окне?
Re: bash: автодополнение
Меня всегда напрягало, что после sudo не работает автодополнение при помощи [TAB]
Оказалось решается очень просто: достаточно раскоментировать вот эти строки в /etc/bash.bashrc
После этого автодополнение будет работать буквально везде, где только можно себе представить
например: bash [TAB] - автодополнение названия хоста или dpkg --sea[TAB] - получится dpkg --search
проверенно в Debian
Оказалось решается очень просто: достаточно раскоментировать вот эти строки в /etc/bash.bashrc
Код: Выделить всё
# enable bash completion in interactive shells
#if [ -f /etc/bash_completion ]; then
# . /etc/bash_completion
#fi
После этого автодополнение будет работать буквально везде, где только можно себе представить
например: bash [TAB] - автодополнение названия хоста или dpkg --sea[TAB] - получится dpkg --search
проверенно в Debian
Debian GNU/Linux 2.6.15
Re: bash: автодополнение
Сегодня на форуме opennet было вот такое улучшение (немного почикал):
Себе добавил, наверное понравится
Сообщение от jr
Оболочка tcsh, та что на FreeBSD по умолчанию, радовала меня такой фичей:
если набрать часть команды, например "cd /", и стрелками выбирать предыдущие вводимые команды из history, то будут выбираться только те, что начинаются на "cd /".
Сообщение от deadmoroz2
В /etc/inpurc добавь эти 2 строчки
"\e[A": history-search-backward
"\e[B": history-search-forward
Себе добавил, наверное понравится
ArchLinux / IceWM
Re: bash: автодополнение
Надо же, а я на него и не посмотрел. Хвалёное (Федорчуком, в частности) дополнение zsh'а в полной красе. Класс./etc/bash_completion
Тоже весьма удобно. Раньше приходилось для этого пользоваться Ctrl+R, что всё же не совсем то.Сегодня на форуме opennet было вот такое улучшение (немного почикал):
¡иɯʎdʞ ин ʞɐʞ 'ɐнɔɐdʞǝdu qнεиж
Re: bash: автодополнение
У меня не работает..
Жму Tab - сразу начинает перебирать варианты. Список выводит, только если дважды Esc нажать..
Slackware 10.1 Bash 3.00.15(2)
/etc/inputrc был из двух строк:
set show-all-if-ambiguous On
TAB: menu-complete
Что же делать ?
Slackware 11 - 2.6.18 @ Athlon XP 1800+/512Mb
Slackware-12 - 2.6.21.5 @ Celeron D 2533/512Mb
Gentoo (amd64) - 2.6.22 @ Athlon X2 5600+/2048Mb
Slackware-12 - 2.6.21.5 @ Celeron D 2533/512Mb
Gentoo (amd64) - 2.6.22 @ Athlon X2 5600+/2048Mb
Re: bash: автодополнение
Не подскажите как в csh сделать вывод списка директорий по двойному tab, чтобы вывод одинарного tab'а остался.
По одинарному получилось так, set autolist, и исчезло автодополнение tab'а по одинарному нажатию.
Заранее спасибо.
По одинарному получилось так, set autolist, и исчезло автодополнение tab'а по одинарному нажатию.
Заранее спасибо.
FreeBSD 6-stable
FreeBSD 5.5-stable
FreeBSD 5.5-stable
Re: bash: автодополнение
Использую sudo, надоело постоянно писать полностью команды.
Например, надо выполнить команду ifconfig от рута.
Без sudo: #ifconfig
С sudo: $sudo ifconfig
Красным показано автодополнение по нажатию клавиши 'tab'.
Синим показано то, что я набираю.
Хочу, чтобы можно было написать так: $sudo ifconfig
Т.е. чтобы он мог продолжить команду.
Возможно?
Например, надо выполнить команду ifconfig от рута.
Без sudo: #ifconfig
С sudo: $sudo ifconfig
Красным показано автодополнение по нажатию клавиши 'tab'.
Синим показано то, что я набираю.
Хочу, чтобы можно было написать так: $sudo ifconfig
Т.е. чтобы он мог продолжить команду.
Возможно?
Re: bash: автодополнение
Должно работать.
Может, у тебя нет в путях этого ifcondig?
Может, у тебя нет в путях этого ifcondig?
ArchLinux / IceWM
Re: bash: автодополнение
А путя у рута и у пользователя точно одинаковые?В каких путях?
От рута все работает.
¡иɯʎdʞ ин ʞɐʞ 'ɐнɔɐdʞǝdu qнεиж
- agent-mega
- Сообщения: 505
- Статус: Автономный модуль
- Контактная информация:
Re: bash: автодополнение
Кстати, дурацкий вопрос, а в каких файлах (для рута и для юзера) указывается PATH ?
DEBIAN & DEBIAN-BASED ONLY
Всё относительно. Объективности не существует.
Всё относительно. Объективности не существует.
Re: bash: автодополнение
Как и любая переменная окружения, может задаваться в любом файле, исполняемом при загрузке системы. Для пользователя традиционно в ~/.bash_profile.Кстати, дурацкий вопрос, а в каких файлах (для рута и для юзера) указывается PATH ?
¡иɯʎdʞ ин ʞɐʞ 'ɐнɔɐdʞǝdu qнεиж