On Sat, Nov 27, 2004 at 05:30:39PM +0100, Gerhard Meier wrote:
Haeufig stoesst man bei while-read-Schleifen auf das Problem.
dmesg | while read f do x="$f" done echo $x;
Die while-Schleife wird in diesem Fall in der Subshell ausgefuehrt, und kann folglich das $x des Vaterprozesses nicht setzen. Loesung in diesem Fall sind named pipes.
FIFO=/tmp/fifo.$$ mkfifo $FIFO
ohne mktemp und Fehlerbehandlung? Mutig, mutig... :-)
dmesg > $FIFO & while read f x="$f" done < $FIFO rm $FIFO echo $x
Der Trick ist, das Kommando vor der Pipe in einer Subshell auszufuehren.
while read f; do x="$f" done < <(dmesg) echo $x