Am Mittwoch, 28. Juli 2004 10:10 schrieb Jan Trippler:
Am Mittwoch, 28. Juli 2004 09:43 schrieb Dr. Jürgen Vollmer:
das macht sicherlich nicht das gewünschte, denn die WHILE-Schleife wird als Sub-shell ausgeführt, also selbst FARBE=rot while true ; do ... FARBE=gruen ... done echo $FARBE
wird immer nur rot ausgeben.
Nein! Wie David schon schrieb (und ich hatte Dich neulich schon mal darauf hingewiesen): Nicht die Schleife ist das Problem sondern die Pipe.
jan@jack:~> f=rot jan@jack:~> while true; do
f=gruen break done
jan@jack:~> echo $f gruen jan@jack:~> f=rot jan@jack:~> while true; do f=gruen; break; done | echo $f rot
Ist eigentlich logisch: Die bash forkt 2x für die beiden Teile der Pipe. Danach laufen beide in separaten subshells. Dann kann die 2. subshell (echo) nur den Wert "rot" für $f haben, weil der zu diesem Zeitpunkt noch nicht verändert war. Würde sie aus stdin lesen, was sicher mehr Sinn machen würde, bekäme sie den veränderten Wert der 1. subshell Gruß, Wolfgang.