Hallo Martin, hallo Leute, Am Samstag, 23. November 2002 12:06 schrieb Martin Borchert:
ich habe da nochmal ein Problem mit Variablen unter der bash, d. h. eher mit den subshells und der Übergabe der Variablen. Folgende Konstruktion:
$x=42 ^ Lass das $-Zeichen weg, dann funktioniert es ;-)
Also: x=42
while read resultat do if [ $resultat -lt $x ] then x=$resultat ... fi done </var/log/foo.stats echo $x
Du suchst also nach der kleinsten Zahl in der Datei... Achtung Fallstrick: Wenn in der Datei nur Zahlen > 42 stehen, werden die ignoriert, da x von Anfang an nicht höher steht. Ist das so gewollt? Beispiel: ----- foo.stats ----- 120 2489 430 60 ----- Ende foo.stats ----- Dein Script einmal ausführen, Ergebnis: cb@tux~> echo $x 42 # !!! Die kleinste Zahl in der Datei ist aber 60!
Der if-Teil wird wie geplant abgearbeitet, innerhalb des while ... done funktioniert die Zuweisung zu x auch.
Sicher?
Ich nehme mal an, dass die Schleife in einer subshell abgearbeitet wird und die variable nicht an die Vatershell übergeben wird. Wie kann ich das denn unterbinden. Und gibt es eine Regel, wann die bash subshells aufmacht und wann nicht?
In diesem Fall gibt es wohl keine Subshell. Subshells werden AFAIK aufgemacht - bei Verwendung von Pipes - _innerhalb_ von Backticks - bei Verwendung von ( ... ) - also gezieltem Öffnen einer Subshell - aber _NICHT_ bei Gruppierung von Befehlen mit { ... }
ps: Ich habe derzeit ein kleines Problem mit man bash: mb 18283 0.0 0.0 1616 360 ? D 10:42 0:00 /usr/bin/gzip -dc /var/cache/man/cat1/bashbuiltins.1.gz
Prozess ist D und man bash bleibt stehen. Reboot ist keine Option, habe hier eine mehrtägige statistische Berechnung am laufen, die ich nicht abbrechen kann. :( Ich bitte um Nachsicht mit RTFMs.
http://www.google.com/search?q=man%20bash *SCNR* Gruß Christian Boltz -- soviel zu Win. Was hat Dich denn da geritten? Auf Win- Fehlermeldungen würde ich nix geben. Wenn das OS konsequent wäre, würde es sich selbst löschen. [Philipp Zacharias in suse-linux]