Overvej nedenstående generiske kodestykke:
$ cmd1 < <(cmd2) # Or cmd1 <(cmd2)
$ echo $?
Her $?
er indstillet til udgangsstatus for cmd1
. Afslutningsstatus for cmd2
er tabt.
I dit tilfælde sqlplus
tilfældigvis er cmd2. Så udgangsstatussen for den kommando er ikke fanget i $?
.
Du kunne prøve dette;
$ sqlplus ... | cmd1
$ status=(${PIPESTATUS[@]})
$ for i in ${status[@]}; do
> [ $i -ne 0 ] && echo Exited with $i
> done
$ echo Exited with 0
Bemærk, at hvis cmd1
er en kompleks struktur (som while read
f.eks.) enhver ting, du kører i, mens loop vil blive kørt i en subshell, og ethvert miljø (variabler/pwd) ændret vil gå tabt.