Hallo Liste, Hallo Christian Am Donnerstag, 29. Juli 2004 00:30 schrieb Christian Boltz:
Hallo Wolfgang, hallo Jürgen, hallo Leute,
Am Mittwoch, 28. Juli 2004 10:06 schrieb Wolfgang Hinsch:
Am Mittwoch, 28. Juli 2004 09:43 schrieb Dr. Jürgen Vollmer:
Das Script verkürzt: FARBE=rot while true ; do ... FARBE=gruen ... done | cmd $FARBE
^^^ Wie schon von vielen geschrieben: die Variable "überlebt" die Pipe nicht, weil eine Pipe gleichzeitig zu einer Subshell führt.
Richtig, aber nicht das Problem der 2.Subshell. Zur Zeit des forks steht die Variable auf rot. Da die 2 Subshell die Variable als Parameter bekommt, wird sie zum Zeitpunkt des forks übergeben und deshalb sieht die 2. Subshell "rot". Richtig ist, dass die Variable aus der ersten Subshell "stirbt", sie wird nicht weitergegeben. Das könnte entweder dadurch umgangen werden, dass sie in die Pipe geschrieben wird und damit die 2 Subshell erreicht (falls diese dann aus stdin liest), oder durch eine Konstruktion wie: FARBE=`echo "gruen"` s/echo/irgendEinScriptDasAufStdoutGruenAusgibt/ [...]
Einspruch!
-> cat ttt FARBE=rot while [ $FARBE = "rot" ] ; do FARBE=gruen done echo $FARBE
-> ./ttt gruen
Ist meine bash kaputt?
Nö, Dein Testscript ist zu kurz. Da kommt nirgends eine Pipe und damit auch keine Subshell vor.
Jein, Du hast leider das (2.)Beispiel von Jürgen, auf das ich mich bezogen habe, nicht zitiert (überlesen?). Gruß, Wolfgang