Mailinglist Archive: opensuse-de (7975 mails)

< Previous Next >
Re: 'test' mit keiner, einer oder mehreren Dateien
  • From: Bernhard Walle <Bernhard.Walle@xxxxxx>
  • Date: Tue, 2 Apr 2002 13:32:28 +0200
  • Message-id: <20020402113228.GC3465@xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx>
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

< Previous Next >