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