Como podemos compilar múltiplas especificações de pacotes em um script bash?

0

O seguinte é o meu código e eu quero compilar a especificação do pacote (salvo como arquivos .pks) e se ele contiver erros, o script deve passar por um erro. No entanto, esse código não está funcionando corretamente. Como posso fazer isso

spec='ls *.pks -1|sed -e ''s/\.pks$//''';
if [ ! -z "$spec" ] ; then
for i in $spec; do
compile_spec()
{
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
}
done
PKS='compile_spec';
echo '$PKS'
if [ $? -ne 0 ]; then
  echo "error"
  exit 1
fi
fi
    
por user290207 15.05.2018 / 08:39

1 resposta

0

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.

    
por 15.05.2018 / 10:05

Tags