Chaos mit lokalen Variablen

31/03/2011 - 11:34 von G | Report spam
Hallo,

ich durchblicke nicht mehr, wo der Fehler ist. Hier mal der Quelltext und
dessen Ausgabe. Es soll mit jockey-text eine Liste von Treibern angelegt
werden.

driverlist()
{
$jockey --update-db
$jockey --list|while read line; do
drivername=`echo $line|cut -d" " -f1`
echo "Neuer Treiber: ${drivername}"
if [ "$DRIVERS" != "" ]; then
DRIVERS="${DRIVERS} ${drivername}"
else
DRIVERS="${drivername}"
fi
echo "Drivers Zwischenstand: \"${DRIVERS}\""
done
}
driverlist
echo "Drivers \"${DRIVERS}\""

Ausgabe bei mir:
Neuer Treiber: xorg:nvidia_173
Drivers Zwischenstand: "xorg:nvidia_173"
Neuer Treiber: xorg:nvidia_96
Drivers Zwischenstand: "xorg:nvidia_173 xorg:nvidia_96"
Neuer Treiber: xorg:nvidia_current
Drivers Zwischenstand: "xorg:nvidia_173 xorg:nvidia_96
xorg:nvidia_current"
Drivers ""

Er setzt also alles korrekt zusammen und vergisst einfach das Ergebnis.
Die Sache ich noch schlimmer: Wenn ich in die Funktion REPLY="a b c"
schreibe, dann kann ich außerhalb der Funktion REPLY ausgeben- ohne
Probleme. Wo ist denn hier der Hund begraben?

Grüße!
 

Lesen sie die antworten

#1 Mart Frauenlob
31/03/2011 - 12:30 | Warnen spam
On 31.03.2011 11:34, Günther Frings wrote:
Hallo,

ich durchblicke nicht mehr, wo der Fehler ist. Hier mal der Quelltext und
dessen Ausgabe. Es soll mit jockey-text eine Liste von Treibern angelegt
werden.

driverlist()
{
$jockey --update-db
$jockey --list|while read line; do
drivername=`echo $line|cut -d" " -f1`
echo "Neuer Treiber: ${drivername}"
if [ "$DRIVERS" != "" ]; then
DRIVERS="${DRIVERS} ${drivername}"
else
DRIVERS="${drivername}"
fi
echo "Drivers Zwischenstand: \"${DRIVERS}\""
done
}
driverlist
echo "Drivers \"${DRIVERS}\""

Ausgabe bei mir:
Neuer Treiber: xorg:nvidia_173
Drivers Zwischenstand: "xorg:nvidia_173"
Neuer Treiber: xorg:nvidia_96
Drivers Zwischenstand: "xorg:nvidia_173 xorg:nvidia_96"
Neuer Treiber: xorg:nvidia_current
Drivers Zwischenstand: "xorg:nvidia_173 xorg:nvidia_96
xorg:nvidia_current"
Drivers ""

Er setzt also alles korrekt zusammen und vergisst einfach das Ergebnis.
Die Sache ich noch schlimmer: Wenn ich in die Funktion REPLY="a b c"
schreibe, dann kann ich außerhalb der Funktion REPLY ausgeben- ohne
Probleme. Wo ist denn hier der Hund begraben?

Grüße!



die pipe '|' làuft in einer subshell, die variablen setzt du dort. am
ende der pipe wird die subshell geschlossen und du verlierst alle daten
die du gesetzt hast.
verwende process subtitution:

while read line; do
...
<setzte variablen>
...
done < <(dein_datenlieferant_process_xyz)

damit der 'worker' process die variablen setzt in der aktuellen shell.

mfg

mart

Ähnliche fragen