2012-10-13 11 views
11

Czy have słowo kluczowe w bash? Lub czy skrypty uzupełniania bash używają języka, który nie jest bash?Hasło "have" dla zakończenia bashu

have gcc && 
_gcc() 
{ 

Jest to zjawisko powszechne. Zobacz: grep "have .* &&" /etc/bash_completion.d/*

Nie mogłem znaleźć żadnych informacji na temat samouczków ukończenia bash, które widziałem i nie mogłem znaleźć żadnych informacji w man bash. Trudno jest też "mieć" google. Gdzie znajdę dokumentację na ten temat?

Zgaduję, że ma to związek z upewnieniem się, że istnieje gcc w PATH?

edytuj: tak. /etc/bash_completion zawiera:

have() 
{ 
    unset -v have 
    # Completions for system administrator commands are installed as well in 
    # case completion is attempted via `sudo command ...'. 
    PATH=$PATH:/sbin:/usr/sbin:/usr/local/sbin type $1 &>/dev/null && 
    have="yes" 
} 

Odpowiedz

15

have i _have są tylko dwie funkcje zdefiniowane w podstawowej bash_completion pliku. Pomiędzy tymi dwoma elementami tworzą owinięcie wokół wbudowanej komendy type w celu ustalenia, czy dostępne jest konkretne polecenie/program.

# This function checks whether we have a given program on the system. 
# 
_have() 
{ 
    # Completions for system administrator commands are installed as well in 
    # case completion is attempted via `sudo command ...'. 
    PATH=$PATH:/usr/sbin:/sbin:/usr/local/sbin type $1 &>/dev/null 
} 

# Backwards compatibility for compat completions that use have(). 
# @deprecated should no longer be used; generally not needed with dynamically 
#    loaded completions, and _have is suitable for runtime use. 
have() 
{ 
    unset -v have 
    _have $1 && have=yes 
} 
+0

Dzięki chepner. Teraz rozumiem. Kiedy bash czyta w plikach ukończenia, jeśli PATH nie ma programu, nie ma potrzeby utrzymywania skryptu zakończenia w pamięci, więc po prostu przeskakuje nad nim. Ma doskonały sens. Wkładam moje 'have' w moje pytanie w celach informacyjnych. Chyba nie mam "_have". Zastanawiam się dlaczego. –

+0

Nie wiem zbyt wiele o wewnętrznych elementach projektu zakończenia basha. Wyciągnąłem powyższy kod z [bash-completion 'git' repository] (http://bash-completion.alioth.debian.org) właśnie dziś rano; może to być nowy kierunek rozwoju, biorąc pod uwagę fakt, że notka o 'have' jest przestarzała na rzecz' _have'. – chepner

+0

Tak, założę się, że masz rację. Dzięki. –