[Lugbz-list] shell problem: salvare il retval di un comando in mezzo ad una pipe

Chris Mair chris at 1006.org
Thu Feb 28 12:12:57 CET 2008


> 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)





More information about the Lugbz-list mailing list