Jak działa uzupełnianie tabulatorów bash?

113

Ostatnio spędzałem dużo czasu w powłoce i zastanawiam się, jak działa autouzupełnianie kart. Jaki mechanizm się za tym kryje? Skąd bash zna zawartość każdego katalogu?

CamelBlues
źródło
2
Możesz chcieć to sprawdzić /etc/bash_completion(przynajmniej w Debianie jest dużo magii).
Wrikken
1
@Wrikken: To bash_completion, które zależy od wypełnienia karty, ale nie do końca jak to się dzieje.
Ignacio Vazquez-Abrams

Odpowiedzi:

101

Autouzupełnianie składa się z dwóch części:

  • Biblioteka readline, jak już wspomniało fixje, zarządza edycją wiersza poleceń i wraca do bash po naciśnięciu klawisza Tab, aby umożliwić dokończenie. Następnie Bash podaje (patrz następny punkt) listę możliwych uzupełnień, a readline wstawia tyle znaków, ile jednoznacznie identyfikują już wpisane znaki. (Możesz skonfigurować bibliotekę readline całkiem dużo, zobacz sekcję Edycja wiersza poleceń w Bash szczegóły w instrukcji).

  • Sam Bash ma wbudowaną completefunkcję definiowania mechanizmu uzupełniania dla poszczególnych poleceń. Jeśli dla aktualnego polecenia nic nie jest zdefiniowane, zastosowano uzupełnianie według nazwy pliku (używając opendir / readdir, jak powiedział Ignacio).

    Część definiująca własne uzupełnienia jest opisana w sekcji Programowalne uzupełnianie . Krótko mówiąc, wraz z complete «options» «command»określeniem zakończenia dla jakiegoś polecenia. Na przykład complete -u sumówi, że wypełniając argument dla supolecenia, wyszukaj użytkowników bieżącego systemu .

    Jeśli jest to bardziej skomplikowane niż mogą obejmować zwykłe opcje (np. Różne uzupełnienia w zależności od indeksu argumentów lub w zależności od poprzednich argumentów), możesz użyć -F function, który następnie wywoła funkcję powłoki w celu wygenerowania listy możliwych uzupełnień. (Jest to używane na przykład do uzupełniania git, które jest bardzo skomplikowane, w zależności od podkomendy i czasami od podanych opcji, a czasami używa się nazw gałęzi (o których bash nie wie).

Możesz wyświetlić listę istniejących uzupełnień zdefiniowanych w twoim obecnym środowisku bash, używając po prostu complete, aby mieć wrażenie, co jest możliwe. Jeśli masz zainstalowany pakiet uzupełniający bash (lub jakkolwiek nazywa się go w twoim systemie), instalowane są uzupełnienia wielu poleceń i, jak powiedział Wrikken, /etc/bash_completionzawiera skrypt bash, który jest następnie często wykonywany podczas uruchamiania powłoki, aby to skonfigurować. W programie można umieścić dodatkowe niestandardowe skrypty uzupełniania /etc/bash_completion.d; te wszystkie pochodzą z /etc/bash_completion.

Paŭlo Ebermann
źródło
1
Strony podręcznika są dostępne tylko dla poleceń niezależnych, a nie dla poleceń wbudowanych powłoki. Ale jest to część podręcznika basha, który połączyłem.
Paŭlo Ebermann
7

Jeśli interesują Cię podstawy: Bash używa readline, który zawiera historię i podstawowe uzupełnianie. Możesz sprawdzić źródło, jeśli chcesz uzyskać szczegółowe informacje. Ponadto możesz użyć readline do zbudowania własnych interfejsów CLI z zakończeniem

fixje
źródło