Hallo, Am Tue, 27 Jul 2004, Michael Hoeller schrieb:
im u.a. skript wird in der while true; Schleife der Wert für FARBE geändert aber allem Anschein nach gilt dieser nur lokal in der Schleife denn die Ausgabe von osd_cat ist immer grün.>
[..]
while true ; do [..] done |osd_cat [..]
Das Problem ist nicht die Schleife. Sondern die pipe. ==== man bash ==== Pipelines A pipeline is a sequence of one or more commands separated by the character |. [..] Each command in a pipeline is executed as a separate pro cess (i.e., in a subshell). ==== Der letzte Satz erklaert, warum du in der zweiten subshell nach der pipe keinen Zugriff auf die in der ersten subshell gesetze Variable hast. Aber ich verstehe sowieso nicht, wozu du die pipe brauchst. Liest "osd_cat" denn die Werte aus stdin? Dort schreibst du ja folgendes hinein: while ... echo MB Temp: $MB_TEMP CPU Temp:$CPU_TEMP; [sleep] echo $FARBE done | osd_cat ... -c $FARBE Ich kenne osd_cat nicht und weiss nicht wie es arbeitet, aber eine Moeglichkeit dein Problem zu umgehen ist die Verwendund eines FIFOs (bzw. einer "named pipe"): $ { echo "foo"; echo "bar" >/tmp/FIFO; } | xargs echo "err='-c $( ./myFIFO done | osd_cat ... -c "$(<./myFIFO)" ... BTW: /dev/stderr statt nem eigenen FIFO zu verwenden klappt leider nicht. Den FIFO solltest du entweder (aber nicht in /tmp (!)) permanent anlegen, oder per 'mktemp' einen sicheren Dateinamen erstellen und diesen dann verwenden (und anschliessend loeschen). Das erfordert dann aber auch ein 'trap', das beim Beenden und Abbruch des scripts den FIFO wieder loescht. Siehe 'man mknod' und 'man 1 mktemp'. Falls du dich fuer diese Variante entschliesst melde dich ggfs. nochmal. Andere Varianten moegen moeglich sein, mir faellt aber grad nix mehr ein ;( HTH, -dnh -- "Not available in the United Stated and many other third world countries." -- "Three Dead Trolls In A Baggie": "The Kyoto Accord"