shell problem: salvare il retval di un comando in mezzo ad una pipe

ho un problema di shell programming che non riesco a risolvere.
Forse uno
di voi ha la soluzione.

Il problema e' il seguente:
Ho una pipeline di comandi, tipo "CC | SS" dove CC produce del
output e SS
e' un filtro che riformatta l'output di CC. Io voglio eseguire la
pipe e
salvarmi il valore di ritorno di CC.

Ho provato i seguenti comandi:
  CC; retval=$? | SS
Questo non funziona perche' la pipe usa l'output di "retval=$?" e
non di CC.
  (CC; retval=$?) | SS
Adesso SS elabora l'output di CC, ma la variabile retval non e'
definita
al di fuori delle parentesi, perche' le parentesi lanciano una sub-
shell e
non so come esportare variabili da li'.

Ciao,

se per caso lavori con una versione recente di bash, c'e` la variabile
speciale
PIPESTATUS che potrebbe fare per te:

mercurius:~ chris$ ls | grep -i sdfsf | bc
mercurius:~ chris$ echo ${PIPESTATUS[0]}
0
mercurius:~ chris$ ls | grep -i sdfsf | bc
mercurius:~ chris$ echo ${PIPESTATUS[1]}
1
mercurius:~ chris$ ls | grep -i sdfsf | bc
mercurius:~ chris$ echo ${PIPESTATUS[2]}
0

Bye,
Chris.

PS: qui ho provato con
GNU bash, version 3.2.17(1)-release (i386-apple-darwin9.0)

Chris Mair wrote:

se per caso lavori con una versione recente di bash, c'e` la variabile
speciale
PIPESTATUS che potrebbe fare per te:

Grazie Chris,

non conoscevo questa variabile. Fa esattamente quello che voglio.
Ho provato sotto cygwin BASH_VERSION='3.2.33(18)-release' e funziona bene.
Ho letto che questa variabile non funzionava bene con versioni vecchie di
Bash, ma non prenso sia un problema: e' per lo sviluppo interno e quindi
abbiamo un certo controllo sul build enviroment.

Cheers,
Thomas