Спеціальне заповнення вкладки bash


34

У мене є своя спеціальна утиліта консолі cooltoolзі списком параметрів

fooOption
barOption

Що мені робити, щоб мати змогу автоматично заповнити параметри натисканням tabклавіші?

Я маю на увазі користувач набрав

$ ./cooltool foo_

потім натискають tab. І потім

$ ./cooltool fooOption _

з’явились.


1
Не перехрещуйтесь.
Вуфферс

2
Зауважте, що ця одна міграція, а інша ні. Я думаю, що багато користувачів досі не розуміють, що вони не повинні розміщувати питання на кількох веб-сайтах SE. Вони використовуються для розрізнення форумів, які не є єдиною системою, де ви можете попросити на кількох різних форумах кращі шанси на швидку відповідь.
jcrawfordor

Відповіді:


2

Напишіть сценарій завершення баш для cooltool. Пакет bash-завершення постачається зі скриптами для багатьох популярних програм, які ви можете використовувати як приклади.


40

Найпростіший спосіб - додати наступне до свого .bashrc.

_cooltool()
{
    local cur=${COMP_WORDS[COMP_CWORD]}
    COMPREPLY=( $(compgen -W "fooOption barOption" -- $cur) )
}
complete -F _cooltool cooltool

Щоразу, коли ви вводите cooltool f[TAB][TAB], _cooltool()функція викликається. Він з’ясує те, що є вашим поточним частковим словом, а потім compgenвизначить, які варіанти відповідають. Вони зберігаються в масиві, COMPREPLYякий називається, який потім відображається. Подивіться man completeі man compgenдля деталей.

Для хорошого підручника ознайомтесь: Написання власної функції завершення Bash


7

Можливо, ви захочете детальніше ознайомитись з вашою /etc/bash_completion.d каталогом вашої системи.

Також слід прочитати цей вступ . Друга частина введення є один вам потрібно.


1
Я використовую Mac OS X 10.6, тому немає /etc/bash_completion.d каталогу

Ах Гаразд, добре знати.


2

Крім відповіді догбейн, ви також можете зробити:

complete -W "fooOption barOption" cooltool

якщо ви просто хочете зіставити список слів з початку рядка. Здається, що повноцінні та сумісні діють більшість варіантів. Я помітив лише відповідність "початку рядка" в командах, які використовую, тому я виявив, що ви можете виконувати інші речі у функції _cooltool, наприклад:

COMPREPLY=( $(grep "$cur" ~/my_potential_args.txt) )

щоб відповідати будь-де в назві параметра.

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