सामान्य स्निपेट के नीचे विचार करें:
$ 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
उदा.) कोई भी चीज़ जो आप उसमें चलाते हैं, जबकि लूप एक सबशेल में चलाया जाएगा और कोई भी परिवेश (चर/pwd) बदला गया खो जाएगा।