Zamiast komentować…
complete -f -X '!*.@(zip|udp)' unzip
należy dodać uzupełnienie dla
-f -X '!*.@(zip|udp)'
| | | |||________|
| | | || |
| | | || +- filterpat: zip or udp
| | | |+------------- @ : Matches one of the given patterns
| | | +-------------- *. : Anything+<dot>
| | +---------------- ! : Negate
| +------------------- -X : Filter out matches in "filterpat"
+---------------------- -f : files
Innymi słowy: Uzupełnij pliki i usuń wszystkie nie kończące się na .zip
lub .udp
.
Dodatki
Jeśli dodasz -o default
uzupełnianie, uzupełni / dopasuje wszystkie pliki i katalogi, jeśli nie ma plików kończących się na .zip
lub .udp
.
Jeśli dodasz -o plusdirs
uzupełnienie, dodasz dowolne katalogi oprócz dopasowań plików kończących się na .zip
lub .udp
.
obecny
Po użyciu complete -p unzip
otrzymasz aktualny wzór.
Z twoich komentarzach brzmi prawie identycznie jak brakuje albo +
czy @
w strukturze, jak w:
# Err:
complete -f -X '!*.(zip|udp)' unzip
|
+---- Missing + or @
co oznaczałoby dopasowanie dowolnego pliku dosłownie kończącego się na.(zip|udp)
. Na przykład
touch 'file_test.(zip|udp)'
Zobacz także tę sekcję instrukcji:
jest to możliwe, np. extglob
nie jest włączone. Włącz przez:
shopt -s extglob
Sprawdź aktualny stan wszystkich shopt
ustawień, wprowadzając:
shopt
Funkcjonować
Jeśli tak -F something
, oznacza to, że używa funkcji o nazwie coś do wygenerowania listy uzupełnień.
_filedir_xspec
Jest zwykle funkcją Debianie. Możesz mieć coś takiego:
$ cat /etc/bash_completion
. /usr/share/bash-completion/bash_completion
Co oznacza /usr/share/bash-completion/bash_completion
pozyskiwać. Tutaj znajdziesz omawianą funkcję . Kilka linii dalej widać, że ta funkcja / uzupełnienie jest dodawana przez funkcję o nazwie _install_xspec
np .:
_install_xspec '!*.@(zip|[ejsw]ar|exe|pk3|wsz|zargo|xpi|s[tx][cdiw]|sx[gm]|o[dt][tspgfc]|od[bm]|oxt|epub|apk|do[ct][xm]|p[op]t[mx]|xl[st][xm])' unzip zipinfo
Wpisy ręczne:
Zaktualizuj komentarze 1:
- Brak zgodności z powodu nieprawidłowych archiwów lub uprawnień do plików.
Nie powinno to wpłynąć na wynik. complete
pasuje tylko do plików określonych przez reguły i nie przetwarza plików. Jeśli możesz je wymienić ls
, powinny się zgadzać.
Na marginesie można dodać taką funkcjonalność za pomocą pełnej funkcji:
function _unzip_validated() {
# 1. Generate list of files ending in e.g. .zip and .udp
# 2. Validate each file and remove invalid ones from file list.
}
complete -F _unzip_validated unzip
- kolory. Dlaczego ls
odróżnić test.zip
od test.upd
?
To nie ma wpływu complete
. Kolory według ls
są dostarczane przez $LS_COLORS
. Próbować:
echo "$LS_COLORS" | tr : '\n' | sort
Powinieneś zobaczyć coś takiego, *.zip=01;31
co oznacza:
*.zip=01;31
|____| | |
| | +--- Red
| +------ Bold
+---------- Files with .zip extension
*.udp
z drugiej strony nie ma z nim żadnego wpisu, więc nie ma koloru.
Następny krok (powinien być pierwszy)
- Otwórz terminal i przejdź do katalogu z plikami testowymi. Zarówno .zip, jak i .udp
- Wchodzić
bash --norc
- Wchodzić
complete -f -X '!*.@(zip|udp)' unzip
- Wchodzić
shopt -s extglob
- Wchodzić
unzip <tab><tab>
Wynik?
Ponadto kliknij edytuj poniżej pytania i dodaj wynik:
bind -V
shopt
env
może być pomocny.
complete -p unzip
dajecomplete -f -X '!*.@(zip|udp)' unzip
iunzip <tab>
uzupełnia plik o nazwietest.zip
. Jednak katalog zawiera również plik o nazwie,test.upd
którego nie można znaleźć po uzupełnieniu tabulatoremunzip
. Czy fakt uprawnień do pliku lub zerowa długość pliku może tłumaczyć to dziwne zachowanie?