Isso deve funcionar:
for i in *.pks;do
i=${i%.pks}
sqlplus -s @user << EOF
WHENEVER SQLERROR EXIT SQL.SQLCODE;
SET LINES 255
SET PAGES 0
SET FEEDBACK OFF
SET ECHO OFF
SET PAGESIZE 0
SET TIMING OFF
SET SERVEROUTPUT ON
SET TERM ON
ALTER PACKAGE $i COMPILE PACKAGE;
EOF
if [ $? -ne 0 ]; then
echo "error"
exit 1
fi
done
Acabei de mover o comando sqlplus
para fora da função e coloquei o if [ $? -ne 0 ]
após ele, então ele deve sair se sqlplus
retornar diferente de zero. O script que você postou tinha if [ $? -ne 0 ]
após o comando echo
, que retornaria 0
.
Eu também alterei o comando ls
para o comando find
, já que normalmente não é uma boa ideia analisar ls
.
Editado de acordo com o comentário do ilkkachu.