KSH Variablen-Scope

G

ggekko33

Ich habe ein Problem mit folgendem Skript, welches unter Linux
(irgendwas mit Suse 8 Enterprise SMP...) nicht läuft, wie ich es erwarte:

#########################
#!/bin/ksh

integer z=0
ps -ef|while read
do
z=$z+1
# ((z=$z+1))
echo $z
done
echo ==$z==
#########################

es wird am Schluß immer ==0== angezeigt, die vorherigen Ausgaben
zeigen brav das Inkrement an.
Die angegebene Alternative funktioniert auch nicht.

Unter Solaris funktioniert alles.

Wer kann helfen?

mfg
 
Hallo
Bin mir jetzt nicht ganz sicher, aber ich würd sagen, die Pipe wird in einer Subshell ausgeführt, an die Variable aus der Subshell kommst du nicht so einfach...
> http://www.cboltz.de/de/linux/bash/
Gruss
d22
 
Hallo
Mir ist nicht ganz klar, was du machen willst.
Aber es ist so, dass while read in der Subshell ausgeführt wird, und somit die Variablen local bleiben.
Auch erwartet read ja eine Variable.
Wenn du die Zeilen zählen willst, kannst du auch mit wc arbeiten.
Um globale Variablen zu setzen, musst du mit set arbeiten.

Gruß Wolfgang
 

Ähnliche Themen

Grafische Anzeige der Temperatur

Textdatei zeilenweise in durchnummerierte Variablen schreiben

Sed: Bestimmtes Feld einer "Zeile mit mehreren Feldern" ergänzen

continue in Schleife einbauen

Nach Variable fragen wenn die nicht als Parameter eingegeben wurde

Zurück
Oben