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

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.


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.

1
Ich mochte diesen Ansatz immer, aber sei .a
dir
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.