Polecenie compgen

man compgen

compgen: compgen [-abcdefgjksuv] [-o opcja] [-A akcja] [-G wzorzec-glob] [-W lista-słów]  [-F funkcja] [-C polecenie] [-X wzorzec-filtra] [-P przedrostek ] [-S przyrostek] [słowo]
    Wypisanie możliwych uzupełnień w zależności od opcji.
    
    Przeznaczone do wykorzystania w funkcjach powłoki generujących możliwe
    uzupełnienia. Gdy podany jest opcjonalny argument SŁOWO, generowane 
    uzupełnienia pasujące do SŁOWA.
    
    Stan wyjściowy:
    Zwracana jest prawda, chyba że podano błędną opcję lub wystąpi błąd.

Podpowiedź

Polecenie compgen różni się niewiele od polecenia type, a bardzo często współwystepuje z poleceniem complete

Przykłady użycia

johny@ThinkPad:~$ compgen -b | head
.
:
[
alias
bg
bind
break
builtin
caller
cd
johny@ThinkPad:~$ compgen -k | head
if
then
else
elif
fi
case
esac
for
select
while

Przygotowujemy funkcję która pozwoli nam zrobić dopełnienia shella i ja następnie instalujemy do polecenia complete.

_dotted_complete() {
    branches=$(find "." -maxdepth 1 -name "*.jpg" -print)
    COMPREPLY=($(compgen -W "$branches" -- "$2"))
}
complete -F _dotted_complete dotted
johny@ThinkPad:~$ dotted <TAB>
johny@ThinkPad:~$ dotted <ENTER>

Command 'dotted' not found, did you mean:

  command 'dotter' from deb dotter

Try: sudo apt install <deb name>

johny@ThinkPad:~$ touch test0.jpg test1.jpg test2.jpg
johny@ThinkPad:~$ dotted ./test <TAB>
johny@ThinkPad:~$ dotted ./test
./test0.jpg  ./test1.jpg  ./test2.jpg