Overweeg het onderstaande algemene fragment:
$ cmd1 < <(cmd2) # Or cmd1 <(cmd2)
$ echo $?
Hier, $? is ingesteld op de afsluitstatus van cmd1 . De afsluitstatus van cmd2 is verloren.
In jouw geval, sqlplus blijkt cmd2 te zijn. Dus de afsluitstatus van dat commando wordt niet vastgelegd in $? .
Je zou dit kunnen proberen;
$ sqlplus ... | cmd1
$ status=(${PIPESTATUS[@]})
$ for i in ${status[@]}; do
> [ $i -ne 0 ] && echo Exited with $i
> done
$ echo Exited with 0
Merk op dat als cmd1 is een complexe structuur (zoals while read b.v.) alles wat u in die while-lus uitvoert, wordt uitgevoerd in een subshell en elke gewijzigde omgeving (variabelen/pwd) gaat verloren.