Rico Koerner rico@netbreaker.de (Sa 13 Feb 2010 00:30:46 CET):
Hallo,
ich hab das Problem, daß eine in der Schleife veränderte Variable außerhalb der Schleife nicht verändert wurde:
OCR_DATA="X" gocr scan.png | tac | while read LINE; do OCR_DATA="$OCR_DATA:$LINE" echo "$LINE" >> while.txt done echo "$OCR_DATA" > ocrdata.txt
Weil Dein „while“ hinter eine Pipeline ist, ist es ein Sub-Process, also eine andere Shell.
Das sollte es tun:
OCR_DATA="X" gocr scan.png | tac | { while read LINE; do OCR_DATA="$OCR_DATA:$LINE" echo "$LINE" >> while.txt done echo "$OCR_DATA" > ocrdata.txt }
Alternativ könnte auch folgendes gehen: (hier läuft die while-Schleife dann in der „Parent“-Shell und das gocr/tac in einer Kindshell <(process substitution) wäre das Stichwort.
while read LINE; do …. done <(gocr scan.png | tac) echo "$OCR_DATA" > ocrdata.txt
Speicherbelegung Das Skript 'lsum' berechnet aus dem ls-Kommando den Gesamtspeicherplatz der ausgewählten Dateien. Einfacher geht es aber mit 'du'.
… den Script kommentiere ich lieber nicht.
#!/bin/sh SUM=0 ls -l | while read D1 D2 D3 D4 D5 REST ; do SUM=`expr $SUM + 0$D5 / 1024` done echo "$SUM KBytes"
Selbes Problem wie bei Dir.
Heiko