[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: Bash Script Frage



On Wed, Jul 13, 2005 at 06:44:24PM +0200, Mart Frauenlob wrote:
> Das Script hab ich hier hochgeladen:
> http://www.jeah.net/~x-link/ifarray
> 
> Kann es sein, daß ich Variablen innerhalb eines 'while' Loops nicht 
> permanent bearbeiten kann?

Die Schleife faengt so an:

> $IP addr show ${iface} | $GREP -w inet | while read data; do

Problem ist hier, dass eine Pipe eine Subshell oeffnet. Das
Problem hat jetzt nicht unbedingt was mit der while-Schleife zu
tun. Hier etwas anschaulicher:

	echo a | read a
	echo $a

Man wuerde "a" als Ausgabe erwarten. Stattdessen bekommt man nur
eine Leerzeile zu sehen. Die Variable "a" wird in einer Subshell
gesetzt. Wenn sich diese beendet (wenn die Pipe geschlossen
wird), ist auch die Variable weg. Da ich Bash nicht kann, sonder
nur sh, hier ein haesslicher Workaround (In Bash gehts bestimmt
schoener, und ohne named pipe):

        fifo=/tmp/myfifo 
	mkfifo $fifo # Fehlerbehandlung bitte dazu denken
        echo a > $fifo &
        read a < $fifo
        echo $a
        rm $fifo

Im Falle der while-Schleife also:

	mkfifo $fifo
	$IP addr show ${iface} | $GREP -w inet > /tmp/myfifo &
        while read data; do
        # ...
        done < $fifo
        rm $fifo

Hier wird die Whileschleife nicht in einer Subshell ausgefuehrt,
sondern der Teil vor der Pipe.

bye,
Gerhard



Reply to: