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?
bash
shell
autocomplete
CamelBlues
źródło
źródło
/etc/bash_completion
(przynajmniej w Debianie jest dużo magii).Odpowiedzi:
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ą
complete
funkcję 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ładcomplete -u su
mówi, że wypełniając argument dlasu
polecenia, 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_completion
zawiera 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
.źródło
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
źródło