Considere el siguiente fragmento genérico:
$ cmd1 < <(cmd2) # Or cmd1 <(cmd2)
$ echo $?
Toma, $?
se establece en el estado de salida de cmd1
. El estado de salida de cmd2
está perdido.
En tu caso, sqlplus
pasa a ser cmd2. Entonces, el estado de salida de ese comando no se captura en $?
.
Podrías probar esto;
$ sqlplus ... | cmd1
$ status=(${PIPESTATUS[@]})
$ for i in ${status[@]}; do
> [ $i -ne 0 ] && echo Exited with $i
> done
$ echo Exited with 0
Tenga en cuenta que si cmd1
es una estructura compleja (como while read
por ejemplo) cualquier cosa que ejecute en ese ciclo while se ejecutará en una subcapa y cualquier entorno (variables/pwd) modificado se perderá.