Kann ich behalten und .. aus. * Expansion?

10

Ich finde es oft ärgerlich (oder schlimmer), wenn ich tippe

command .*

in bash und der Befehl gilt für das übergeordnete Verzeichnis und das aktuelle Verzeichnis. Gibt es eine Shell-Option oder eine andere Konfiguration, die ich anpassen kann, um Bash auszuschließen .und ..von der Erweiterung von .*?

David Z.
quelle

Antworten:

13

In Bash, in dieser Reihenfolge:

GLOBIGNORE=.
shopt -u dotglob

Wenn GLOBIGNORE eingestellt ist ,. und .. werden automatisch ignoriert, sodass Sie sie nicht in GLOBIGNORE festlegen müssen. Wenn Sie jedoch nichts anderes zu ignorieren haben, müssen Sie nichts festlegen.

Jedes Mal, wenn Sie GLOBIGNORE auf einen Wert ungleich Null setzen, aktiviert bash die Option dotglob, sodass Sie sie anschließend deaktivieren müssen. Andernfalls wird bash um *Dateien erweitert , die mit einem Punkt beginnen.

camh
quelle
Cool, danke! Eigentlich hätte ich mich lieber dotglobeingeschaltet, also GLOBIGNOREklingt die Einstellung perfekt.
David Z
Wenn GLOBIGNORE eingestellt ist, ignoriert Bash .und ..aber nicht foo/.und foo/... Möglicherweise möchten Sie dies verwenden GLOBIGNORE=.:*/.:*/.., damit dies auch mit Pfadnamen funktioniert.
user123444555621
3

Auf einem unbekannten System, auf dem ich zu wenig Zeit habe, um die verwendeten Einstellungen zu überprüfen (wie GLOBIGNORE), verwende ich das folgende narrensichere Muster:

command .??*
  • Schnell zu tippen und garantiert auszuschließen .und ..unabhängig von der Umgebung.
Alexander Shcheblikin
quelle
1
Ich mochte diesen Ansatz immer, aber sei .a
dir