001
11.06.2003, 20:46 Uhr
virtual
Sexiest Bit alive (Operator)
|
Das ist in mancherlei Hinsicht nicht das, was Du willst. Zunächst mal solltest du dir vergegenwärtigen, was "[" ist. Das ist nicht irgendein Syntaxelement vom while, sondern ein eigenes Programm namens test. (genauer gesagt ein Shellbuiltin). Wenn test als "[" aufgerufen wird, erwartet es als letzten parameter ein "]". Daher diese Schreibweise. Dh
Code: |
while [ bedingung ]
|
is das gleiche wie
Code: |
while test bedingung
|
In Deinem Fall geht das also nicht, weil das "]" wegen der Pipe nicht dem "[" (aka test) sondern dem cut als parameter zugeordnet wird. In das cut denkt sich halt Dumm wie es ist: "]" muß wohl ne Datei sein. Ein weiteres Problem - selbst wenn das syntaktisch alles gehen würde wäre die Frage, was Du denn von test (aka "[") erwartest? - Test wertet den Exitcode des Kommandos aus. Irgendwie hat das aber nichts mit dem Zu tun, was du eigentlich willst. Eigentlich willst Du nämlich das:
Code: |
ls -l | cut -d\ -f8 | while read i do echo $i done
|
Jetzt läuft es zwar durch, aber irgendwie siehst Du noch immer nix, eil nämlich zwischen den einzelnen Spalten von der ausgabe von ls -l ganz viele Leerzeichen stehen, die Du als Delimiter interpretieren willst. Also mußt Du entweder mit cut -cXXX-YYY genau die Spalten rausgreppen. Ist aber ziemlich doof, weil die sich schon allein bei sehr großen Dateien oder bei devicedateien ganz schön verschieben können. Summa summarum: Mit
Code: |
du -sb * | cut -d\ -f1 | while read i do echo $i done
|
Sind die Ergebnisse nicht ganz so frustrierend. -- Gruß, virtual Quote of the Month Ich eß' nur was ein Gesicht hat (Creme 21) Dieser Post wurde am 11.06.2003 um 20:47 Uhr von virtual editiert. |