Как передать список команд, отображаемых в «Tab Complete»?


12

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

Снимок экрана: завершение вкладки http://img13.imageshack.us/img13/5541/picturemhy.jpg

Есть ли способ, которым я могу передать вывод двойной вкладки куда-нибудь, как grep? Я нашел связанный пост , но я все еще не уверен, как реализовать это, чтобы передать это grep.


Как вы себе представляете, что бы ввести grepрегулярное выражение? (y or n or g[rep])? Ненавижу звучать пессимистично, но сомневаюсь, что это можно сделать, не добавляя его в код bash.
Кевин

Ответы:


21

Для команд используйте compgen -c:

$ compgen -c bas
basename
base64
bashbug
bash
basename
base64
bashbug

Этот вывод вы можете просто передать через канал grep.


+1 Для команды ... Следующая интересная часть может быть, как сделать сочетание клавиш для этого.
rozcietrzewiacz

3

Основываясь на ответе @ salutis, я создал скрипт, который я вызывал compи сохранял в ~/bin/compэтих поисках commands', aliasesи builtins(флаг опции -cabсм. Запись bash man ), с необязательным вторым параметром, который, если присутствует, направляет вывод grepи ищет Второй параметр

Usage: comp string [keyword-for-grep]

Код:

#!/bin/bash

if [ -z "$1" ]; then
    echo usage: comp string [keyword-for-grep]
    echo 
    exit
fi

if [ -z "$2" ]; then
    compgen -cab -- $1
    exit
fi

compgen -cab -- $1 | grep -i $2

Лично мне также было бы интересно найти способ удалить последнюю команду из истории оболочки в скрипте (что-то связанное с ней history -d), чтобы при поиске в bashистории я не находил compзаписи. Я знаю, что я тоже могу сделать это, HISTIGNOREно linux довольно мощный, поэтому должен быть способ сделать это из файла скрипта, тоже?


1
Конечно, вы можете настроить это в соответствии со своими потребностями, но это должно помочь вам начать.
отметка

-3

Почему бы не найти то, что вы ищете?

Пример:

find / -name ec2* -executable -type f -perm -og+rx -print

Зная ваш вариант использования, я могу создать более подробный пример команды.


2
Другими словами, вы можете переопределить все, что делает завершение bash. Конечно, но это не практично, и дело не в этом.
Жиль "ТАК - перестань быть злым"
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.