Hi Am Sonntag, 4. August 2002 23:39 schrieb Matthias Hentges:
Am Son, 2002-08-04 um 22.47 schrieb Axel Heinrici:
Am Sonntag, 4. August 2002 19:35 schrieb Jan Trippler:
On Son, 04 Aug 2002 at 18:11 (+0200), Sascha Andres wrote:
ich habe mir ein kleines Skript angefungen:
,----[ test.sh ]-
| #! /bin/sh | | ps aux > .tmp | running="FALSE" | cat .tmp | grep "java" | while read line
......
Ich kann mir diesen Effekt im Moment nicht erklären (denn eine Subshell liegt offenbar nicht vor - $running ist innerhalb der Schleife bekannt).
Hi
Nur mal so interessehalber. Ich kann zwar noch nicht richtig skripten, aber dazu hab' ich jetzt doch ne Frage. Wieso keine Subshell? Habe gerade nochmal in "info bash" geschaut. Ich interpretiere das so, dass jeder Befehl in der Pipe in einer Subshell ausgeführt wird. Ich habe das bisher auch nie bezweifelt, denn die Befehle laufen ja eigentlich parallel. Was stimmt denn nun? Subshell oder nicht Subshell.
Die Befehle in der Pipe werden in Subschells ausgeführt, und zwar nacheinander (seriell).
Hmm Ich habe gerade mal zu testen folgendes eingegeben (mp3 ist relativ groß und der tar alleine dauert schon minuten): tar -c mp3 |bzip2 >test.test In ner anderen shell sehe ich dann im top oder mit ps tar und bzip2 gleichzeitig laufen.
Hier ging es aber um die Variable "running" die ja nicht aus der Pipe kommt, sondern von der while-Schleife erzeugt wird.
Die while-Schleife sollte eigentlich nicht in einer Subshell laufen, was sie aber anscheinend doch macht, da die Variable lokal auf die while-Schleife begrenzt ist - zumindest im angegebenen Beispiel.
Auf die Gefahr hin, dass ich mich für doof haltet: In dem Skript steht: "cat .tmp | grep "java" | while read line" Ich verstehe das so, dass grep und die while-Schleife jeweils in einer Subshell laufen. ***verwirrt sei****
Ich persönlich nehme fast immer for-loops. Da treten solche Probleme nicht auf.
Wie auch immer. Für mich sieht das immernoch so aus als ob es an den "|" liegt und nichts an den Eigenschaften der while-loop. Vielleicht raff' ich es morgen. Es ist ja auch schon spät :-) mfg Axel