W jaki sposób narzędzia wiersza polecenia mają własną listę autouzupełniania?

24

W jaki sposób Bash w Ubuntu zna listę działań określonych przez narzędzie?

Na przykład po dwukrotnym wpisaniu apt-get i tab zobaczę tylko usuwanie, aktualizację, aktualizację ... itd., Ale nie akcje dla innego polecenia lub plików w bieżącym katalogu.

Rozwijam narzędzie wiersza polecenia w Go i chciałbym udostępnić tę funkcję dla obsługiwanych dystrybucji.

Amged Rustom
źródło
1
Usunąłem „ubuntu” z twojego tytułu i tagów, ponieważ lepiej jest to jako bardziej ogólne pytanie (odpowiedź nie jest specyficzna dla żadnej dystrybucji).
goldilocks,
1
Świetne pytanie, często się nad tym zastanawiałem, ale nigdy nie szukałem czasu.
akatakritos

Odpowiedzi:

25

Robi to za pomocą funkcji uzupełniania bash v4. Kod zakończenia apt-getjest dostarczany przez bash-completionpaczkę i znajduje się pod adresem /usr/share/bash-completion/completions/apt-get. Aplikacje, które mają ukończenie i nie są częścią bash-completionpakietu podstawowego , umieszczają w nich swoje skrypty uzupełniania /etc/bash_completion.d.

Uzupełnienia są ładowane poprzez pozyskiwanie /etc/bash_completion. Dokładnie, gdzie to jest zrobione, będzie się różnić w zależności od wersji Debiana lub Ubuntu. To z kolei zaopatruje wszystko w /usr/share/bash-completion/completionsi /etc/bash_completion.d.

Jordan
źródło
Dzięki, to wyjaśnia. Więc implementacja różni się nie tylko w zależności od Debiana i Ubuntu, ale także w każdej wersji tej samej dystrybucji?
Amged Rustom
1
@Amgad Działa tak samo we wszystkich dystrybucjach. Jedyne różnice dotyczą lokalizacji plików i być może niektóre ustawienia domyślne.
Gilles „SO - przestań być zły”,