Zvažte níže obecný úryvek:
$ cmd1 < <(cmd2) # Or cmd1 <(cmd2)
$ echo $?
Tady, $?
je nastaven na ukončovací stav cmd1
. Stav ukončení cmd2
je ztraceno.
Ve vašem případě sqlplus
náhodou je to cmd2. Takže stav ukončení tohoto příkazu není zachycen v $?
.
Můžete zkusit toto;
$ sqlplus ... | cmd1
$ status=(${PIPESTATUS[@]})
$ for i in ${status[@]}; do
> [ $i -ne 0 ] && echo Exited with $i
> done
$ echo Exited with 0
Všimněte si, že pokud cmd1
je složitá struktura (jako while read
např.) cokoli, co spustíte v této smyčce while, bude spuštěno v subshell a jakékoli změněné prostředí (proměnné/pwd) bude ztraceno.