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

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.


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.

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
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.