Pertimbangkan cuplikan umum di bawah ini:
$ cmd1 < <(cmd2) # Or cmd1 <(cmd2)
$ echo $?
Di sini, $?
diatur ke status keluar cmd1
. Status keluar dari cmd2
hilang.
Dalam kasus Anda, sqlplus
kebetulan cmd2. Jadi, status keluar dari perintah itu tidak ditangkap di $?
.
Anda bisa mencoba ini;
$ sqlplus ... | cmd1
$ status=(${PIPESTATUS[@]})
$ for i in ${status[@]}; do
> [ $i -ne 0 ] && echo Exited with $i
> done
$ echo Exited with 0
Perhatikan bahwa jika cmd1
adalah struktur yang kompleks (seperti while read
misalnya) apa pun yang Anda jalankan di loop while itu akan dijalankan dalam subkulit &lingkungan apa pun (variabel/pwd) yang diubah akan hilang.