Hallo Liste! Ich bin gerade dabei meine Linuxgrundlagen zu vertiefen und bin auf folgendes Problem gestoßen: Laut Doku sollte 'ls [.]* alle Verzeichnisse auflisten die mit einem Punkt anfangen. Geht aber nicht. Ich bekomme einfache nur die Meldung /bin/ls: [.]*: No such file or directory wobei ls [Buchstabe oder Zahl]* funktioniert. Kann mir jemand sagen warum? Christa p.s. Ich arbeite mit bash 3.0 -- 10 GB Mailbox, 100 FreeSMS/Monat http://www.gmx.net/de/go/topmail +++ GMX - die erste Adresse für Mail, Message, More +++
Christa Gerber, Dienstag, 14. Februar 2006 01:53:
/bin/ls: [.]*: No such file or directory
Ich bin zwar eigentlich überhaupt kein bash-Spezialist, aber trotzdem folgende Überlegung: "." steht für ein beliebiges Zeichen. Das willst Du aber gerade nicht. Du willst, daß der . auch als solcher interpretiert wird. Daher mußt Du ihm die Sonderbedeutung nehmen. Also schlage ich vor: "ls \.*". Das wirft jedenfalls bei mir alle .-Verzeichnisse aus, und deren Inhalt. -- Andre Tann
Andre Tann wrote:
Christa Gerber, Dienstag, 14. Februar 2006 01:53:
/bin/ls: [.]*: No such file or directory
Ich bin zwar eigentlich überhaupt kein bash-Spezialist, aber trotzdem folgende Überlegung:
"." steht für ein beliebiges Zeichen. Das willst Du aber gerade nicht. Du willst, daß der . auch als solcher interpretiert wird. Daher mußt Du ihm die Sonderbedeutung nehmen.
Also schlage ich vor: "ls \.*". Das wirft jedenfalls bei mir alle .-Verzeichnisse aus, und deren Inhalt.
Entschuldige bitte, aber das ist Unsinn! Wo bitte steht Punkt für ein beliebiges Zeichen? Unter grep zum Beispiel, nicht aber in der bash! Dort ist es das Fragezeichen! Deine Kommandozeile "ls \.*" ist in diesem Fall identisch mit "ls .*" und es werden tatsächlich nur alle die Verzeichniseinträge angezeigt, die mit einem Punkt beginnen. Christas Fehler liegt nicht in dem Punkt, sondern darin, daß sie (offensichtlich) die Klammern mit angegeben hat. In "man bash" steht zum Beispiel folgendes: * Matches any string, including the null string. ? Matches any single character. [...] Matches any one of the enclosed characters. A pair of characters separated by a hyphen denotes a range expression; any character that sorts between those two characters, inclusive, using the current locale's collating sequence and character set, is matched. If the first character following the [ is a ! or a ^ then any character not enclosed is matched. The sorting order of characters in range expressions is determined by the current locale and the value of the LC_COLLATE shell variable, if set. A - may be matched by including it as the first or last character in the set. A ] may be matched by including it as the first character in the set. Within [ and ], character classes can be specified using the syntax [:class:], where class is one of the following classes defined in the POSIX.2 standard: alnum alpha ascii blank cntrl digit graph lower print punct space upper word xdigit A character class matches any character belonging to that class. The word character class matches letters, digits, and the character _. Within [ and ], an equivalence class can be specified using the syntax [=c=], which matches all characters with the same collation weight (as defined by the current locale) as the character c. Within [ and ], the syntax [.symbol.] matches the collating symbol symbol. Letzteres sagt mir, daß die Zeichenkette offensichtlich deshalb nicht "verstanden" wird, weil es sich dabei um den unvollständig angegebenen Fall "[.symbol.]" handelt. Wenn man die Klammern jedoch wegläßt, werden nicht nur alle Nicht-Verzeichnis-Verzeichniseinträge angezeigt, sondern auch die Inhalte aller Verzeichnisse, die mit einem Punkt beginnen - auch das aktuelle (".") und das darüber liegende (".."). Möchte man letzteren Effekt nicht, muß man die Option "-d" angeben. Ich hoffe, das bringt etwas mehr Verstehen in die Geschichte! Viel Spaß beim Ausprobieren Martin
participants (3)
-
Andre Tann
-
Christa Gerber
-
Martin Deppe