我们如何在 bash 脚本中编译多个包规范?

我们如何在 bash 脚本中编译多个包规范?

以下是我的代码,我想编译包规范(另存为 .pks 文件),如果它包含任何错误,脚本应该出现错误。但是,这段代码无法正常工作。我怎样才能做到这一点

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

答案1

这应该有效:

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

我刚刚将sqlplus命令移出函数,并将其放在后面,因此如果返回非零,if [ $? -ne 0 ]它应该退出。sqlplus您发布的脚本if [ $? -ne 0 ]在命令之后echo,该命令将返回0.

我还更改了ls命令的命令find,因为解析ls.

根据 ilkkachu 的评论进行编辑。

相关内容