【问题标题】:Capture and check bteq return code in Unix在 Unix 中捕获并检查 bteq 返回码
【发布时间】:2015-07-30 08:04:11
【问题描述】:

我正在开发一个脚本,该脚本又调用其他几个脚本 (.ksh)。基本上,当其中一个失败时,他们不应该进行下一个。因此,我尝试在一个涉及bteq(基本 Teradata 查询)会话的脚本中检查返回码。请在下面找到场景:

 bteq <<EOF!
 .run file ${TGTRUNFILEN} ;
 .maxerror 1;
 .set width 245;
 ...
 ...
 sel * from table ;
 .if ACTIVITYCOUNT <> 0 then .GOTO QUIT
 .os mail command "error msg"
 exit 1;
 .LABEL QUIT
 .quit;
EOF!
echo $rcode
rcode=$?    
if [[ $rcode != 0 ]]
     then
         echo "$0: Insufficient Perm Space : username " >&2
         exit 4
fi

在这里,脚本失败,我可以看到日志显示失败,返回代码 1,但为什么没有显示文本“$0:Insufficient Perm Space: Username”。我认为它退出了整个脚本,但我需要以某种方式修复它。 有人可以帮我解决这个问题吗?

【问题讨论】:

  • echo $rcodeif 测试之前会发生什么:值是0? bteq 是否真的以非零状态按需退出?
  • 即使给echo $rcode,也不会发生任何事情。在exitquit 声明之后我看不到任何东西。我现在完全一无所知。
  • 由于您截断了脚本的顶部,我们看不到 here-document 行。请补充。它应该包含如下内容:bteq &lt;&lt;'EOF!'(可能带有一些额外的参数到bteq,通常放在此处文档规范之前)。不要向我们显示任何实际密码,并注意用户名和主机名(example.com 在这里很有用)。但是,如果您犯了错误,您可能不会被告知(更有趣的事情已经知道)。如果您省略了!,或者EOF! 行也有一个尾随空格,那么您就有问题了。
  • 谢谢 Jon。但我检查了,没有尾随空格。我在上面添加了 here-document 行。我在这里没有看到任何问题。仍然不清楚我错过了什么。
  • bteq 之前的顶部有一个反引号,fi 之后的底部有一个单引号;我假设这些在您的真实脚本中并不真正存在,因为它们之间会使您的脚本在语法上不正确。如果它们都是反引号,那将意味着什么——但可能不是你想要的。

标签: unix teradata return-code


【解决方案1】:

您好,非常感谢您的回复。我找到了解决这个问题的方法。我刚刚添加了这样的“设置”命令。

 set +e
 bteq <<EOF!
 ...
 ...
 EOF!
 rcode=$?
 set -e

对我来说很好。

干杯

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-09-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-19
    • 1970-01-01
    相关资源
    最近更新 更多