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?
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?
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ład complete -u su
mówi,
że wypełniając argument dla su
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
.
/etc/bash_completion
(przynajmniej w Debianie jest dużo magii).