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.