Często piszę, gdy irytują (lub gorzej)
command .*
w bash, a polecenie dotyczy katalogu nadrzędnego i katalogu bieżącego. Czy istnieje jakaś opcja powłoki lub inna konfiguracja mogę uszczypnąć, aby wykluczyć bash .
i ..
od ekspansji .*
?
W skrócie, w następującej kolejności:
GLOBIGNORE=.
shopt -u dotglob
Po ustawieniu GLOBIGNORE,. i .. są automatycznie ignorowane, więc nie musisz ich ustawiać w GLOBIGNORE, ale jeśli nie masz nic innego do zignorowania, nie będziesz mieć nic do ustawienia.
Za każdym razem, gdy ustawisz GLOBIGNORE na wartość inną niż zero, bash włącza opcję dotglob
, więc będziesz musiał ją później wyłączyć; w przeciwnym razie bash rozszerzy *
się o pliki zaczynające się od kropki.
dotglob
włączyć, więc ustawienieGLOBIGNORE
brzmi idealnie..
, a..
jednak niefoo/.
ifoo/..
. Możesz użyćGLOBIGNORE=.:*/.:*/..
tej opcji, aby działała również z nazwami ścieżek.W nieznanym systemie, w którym mam za mało czasu na sprawdzenie używanych ustawień (takich jak GLOBIGNORE), używam następującego niezawodnego wzoru:
.
i..
bez względu na środowisko.źródło
.a