Am 13.2.2010 10:09, schrieb Heiko Schlittermann:
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 }
Soweit funktioniert das, hilft mir aber nicht wirklich weiter. Die ocrdata.txt war ja nur dort, um das zu prüfen. Jetzt erweitert sich die Subshell auf die {}. Die Daten werden aber zusammen mit weiteren am Ende der Datei weiterverarbeitet. Die Subshell soweit auszudehnen ist nicht sinnvoll.
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)
syntax error: unexpected end of file
done<<(gocr scan.png | tac) syntax error near unexpected token `('
done<<$(gocr scan.png | tac) wirft den Rest der Datei mit in die Schleife
done<$(gocr scan.png | tac) Datei nicht gefunden
done << EOF $(gocr scan.png | tac) EOF
Lediglich die Variante mit dem HERE-Document funktioniert an dieser Stelle. Also bleibt es bei dieser Variante.
Gruß Rico