Когда я нажимаю tab в консоли, я получаю этот вывод
Показать все 2957 возможностей? (y или n)
blockquote>Есть ли способ использовать
grep
для этих 2957 возможностей? Я хотел бы найти все команды со словом «svn» в них.
for i in $(echo $PATH | tr ":" "\n"); do find $i -type f -perm +111; done | grep svn
Очень похоже на ответ totaam, за исключением того, что он ограничивает область применения исполняемыми файлами (как это делает Bash). Но JJE compgen
еще на милю лучше.
Решением является встроенный bash compgen
. Для извлечения 'svn' из всех доступных команд и псевдонимов команд, доступных через $PATH
, введите.
compgen -ac | grep svn
Хотите выполнить поиск по определенному префиксу (например, по всем командам, начинающимся с ecrypt
)? Используйте регулярные выражения. .
compgen -ac | grep "^ecrypt"
Это должно быть равнозначно:
for x in `echo $PATH | sed 's/:/ /g'`; do ls $x | grep svn; done
Вы можете попробовать использовать compgen
.
Например:
compgen -ac | grep "svn"
Я не знал compgen, и предложил бы:
ls -d ${PATH//:/\/*svn* } 2>/dev/null
для bash.
${VAR//pattern/replace} replaces in VAR pattern with replace. // is used to replace every pattern, not just the first, which would be just /.
Может быть, {,.}*svn*
здесь помогает, например, ls -l /usr/bin/{,.}*svn*<tab>
.
Но посмотрите на Zsh! Здесь: http://www.jukie.net/bart/blog/zsh-tab-completion - несколько замечательных примеров того, как это может помочь уменьшить ваши результаты завершения вкладки. Это включает в себя также отрицание, например, если вам нужны все результаты завершения табуляции без слова "foobar" или все результаты с четными цифрами, в первую очередь вкладка подкаталога и многое другое. Причиной, по которой я перешел на zsh, был обмен историей между всеми открытыми терминалами.