Jak potokować listę poleceń wyświetlanych przez „zakończone tabulatorem”?

12

Kiedy używam poleceń w bash, podoba mi się opcja podwójnej zakładki, aby wyświetlić dostępne polecenia. Niektóre polecenia mają więcej możliwych dopasowań niż inne:

Zrzut ekranu zakończenia zakładki http://img13.imageshack.us/img13/5541/picturemhy.jpg

Czy istnieje sposób, w jaki mogę przesłać dane wyjściowe z podwójnej zakładki gdzieś, na przykład grep? Znalazłem powiązany post , ale wciąż nie jestem pewien, jak go zaimplementować, aby przesłać go do grep.

cwd
źródło
Jak dokładnie wyobrażasz sobie, że wejdziesz do grepwyrażenia regularnego? (y or n or g[rep])? Nienawidzę brzmieć pesymistycznie, ale wątpię, by można to zrobić bez dodawania go do kodu bash.
Kevin,

Odpowiedzi:

21

Do poleceń użyj compgen -c:

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

To wyjście można po prostu przepuścić grep.

salutis
źródło
+1 Dla polecenia ... Kolejną interesującą częścią może być utworzenie do tego skrótu klawiaturowego.
rozcietrzewiacz
3

W oparciu o użytkownika @ salutis odpowiedź stworzyłem skrypt, który nazwałem compi przechowywane w ~/bin/compktóry wyszukuje commands”, aliasesoraz builtins(opcja flag -cabzobaczyć wpis atakujących człowieka ), z opcjonalnym drugim parametrem, który, jeśli jest obecny, rur wyjście do grepi wyszukuje drugi parametr.

Usage: comp string [keyword-for-grep]

Kod:

#!/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

Osobiście byłbym również zainteresowany wymyśleniem sposobu usunięcia ostatniego polecenia z historii powłoki w skrypcie (coś związanego z history -d), aby podczas wyszukiwania bashhistorii nie znaleźć compwpisów. Wiem, że mogę to zrobić, HISTIGNOREale linux jest dość potężny, więc musi istnieć sposób, aby to zrobić również z pliku skryptu - prawda?

znak
źródło
1
Oczywiście możesz to dostosować do swoich potrzeb, ale powinno zacząć.
zaznacz
-3

Dlaczego nie znajdziesz tego, czego szukasz?

Przykład:

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

Znając swój przypadek użycia, mogę stworzyć bardziej szczegółowy przykład polecenia.

Matt
źródło
2
Innymi słowy, możesz reimplementować wszystko, co robi ukończenie bash. Jasne, ale to nie jest praktyczne i nie o to chodzi w tym pytaniu.
Gilles „SO- przestań być zły”