Помислете за общия фрагмент по-долу:
$ cmd1 < <(cmd2) # Or cmd1 <(cmd2)
$ echo $?
Ето, $?
е зададено на изходно състояние на cmd1
. Изходният статус на cmd2
се губи.
Във вашия случай, sqlplus
случайно е cmd2. Така че изходният статус на тази команда не се записва в $?
.
Можете да опитате това;
$ sqlplus ... | cmd1
$ status=(${PIPESTATUS[@]})
$ for i in ${status[@]}; do
> [ $i -ne 0 ] && echo Exited with $i
> done
$ echo Exited with 0
Имайте предвид, че ако cmd1
е сложна структура (като while read
напр.) всичко, което изпълнявате в този цикъл while, ще се изпълнява в подобвивка и всяка променена среда (променливи/pwd) ще бъде загубена.