Hallo, On Tue, 02 Apr 2002 at 11:56 (+0200), Bernd Brodesser wrote:
* Bernhard Walle schrieb am 02.Apr.2002:
On Mon, 01 Apr 2002 at 22:22 (+0200), Bernd Brodesser wrote:
* Martin Borchert schrieb am 01.Apr.2002:
Zuerst ganz knapp die Frage: Kann ich mit test (oder von mir aus auch mit [[ ]]) prüfen, ob in einem Verzeichnis irgendeine Datei liegt? Bei test -e * gibt's (verständlicherweise) nen Fehler, wenn mehr als eine Datei da ist. :(
test `ls -a | wc -l` -gt 2
Die Verzeichnisse . und .. liegen in jedem Verzeichnis, daher gegen 2 prüfen. Wenn ls in einer pipe schreibt, dann gibt es immer pro Datei eine Zeile aus. (Wenn nicht außdrücklich -C angegeben wird)
Anscheinend ist die Voreinstellung aber so, dass diese zwei "Dateien" nicht mit angezeigt werden. Ich habe es jetzt extra nochmal geprüft:
berwal@hugo:~ > mkdir test berwal@hugo:~ > cd test berwal@hugo:~/test > ls
Da steht auch ls -a Einfach nur ls gibt keine Dateien aus, die mit . anfangen. Es könnte sehr wohl eine Datei .datei im Verzeichnis sein, die würde mit einem einfachen ls auch nicht mitangezeigt, und das Vezeichnis als vermeindlich leer angesehen, obwohl es das nicht ist.
Stimmt.
berwal@hugo:~/test > type ls ls is aliased to `ls $LS_OPTIONS' berwal@hugo:~/test > echo $LS_OPTIONS -N --color=tty -T 0
Das wird aber in einem Skript nicht verwendet. Der alias wird im /etc/profile gesetzt, und das wird nur von interaktive shells gelesen. Ein Skript bekommt von dem alias nichts mit.
Ist in dem Fall sowieso egal. Eine Ausnahme wäre es, wenn man das Skript nicht ausführt sondern sourced.
============== aus ls(1) ============================== -a, --all do not hide entries starting with .
-A, --almost-all do not list implied . and .. ========================================================
Deine Variante ist schon richtig, aber wozu so kompliziert? Wenn man ganz auf Nummer sicher gehen will, dann empfinde _ich_
[ `ls -A | wc -l` -gt 0 ]
als schöner. Und ja, die Test-Schreibweise gefällt _mir_ nicht, das ist aber dann wirklich reine Geschmackssache ;-)
Ich habe -a gewählt, weil es das immer gibt. -A ist hingegen eine Besonderheit des GNU ls.
Das wusste ich nicht. *grummel* Warum können die GNU-Leute ihre Erweiterungen nicht irgendwo hinschreiben.
[ ... ] sieht so aus, als gehörte es zur Syntax der bash, und verwirrt mehr, als das es hilft. In Wirklichkeit ist es ein Synonym zu test und daher ein eigener Befehl.
Befehl ja, aber beide sind bash-builtin und somit ist test auch kein eigenes Programm wie etwa grep.
Es wird grundsätzlich auf dem Rückgabewert geprüft. So ist es z.B auch Sinnvoll
if grep irgendwas Datei then #falls irgendwas irgendwo in Datei steht else #falls nicht fi
zu schreiben. Da braucht man kein test und auch kein [ ... ]
Stimmt. Trotzdem gefällt mir [ ... ] besser. Ich sagte ja, reine Geschmackssache. Gruß, Bernhard -- "Der wahrscheinlich ärgerlichste Aspekt eines Com- puterprogrammes ist die Art und Weise, in der es auf Ihre Fehler reagiert" -- L. Lamport, LaTeX-Handbuch