Mogę zatrzymać i .. z. * rozszerzenia?

10

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 .*?

David Z
źródło

Odpowiedzi:

13

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.

camh
źródło
Fajne dzięki! Właściwie wolałbym się dotglobwłączyć, więc ustawienie GLOBIGNOREbrzmi idealnie.
David Z
Kiedy GLOBIGNORE jest ustawiona, bash ignoruje ., a ..jednak nie foo/.i foo/... Możesz użyć GLOBIGNORE=.:*/.:*/..tej opcji, aby działała również z nazwami ścieżek.
user123444555621,
3

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:

command .??*
  • Szybkie pisanie i gwarantowane wykluczenie .i ..bez względu na środowisko.
Alexander Shcheblikin
źródło
1
Zawsze podobało mi się to podejście, ale należy pamiętać, że nie pasuje ono do plików 1-char.a
MestreLion