我有一个代码片段,如下所示。
if [ $output -le 0 ]
then
echo 'no data present'
echo "$ORACLEHOME/bin/sqlplus -s $DBUSER/$DBPASSWORD"
$ORACLEHOME/bin/sqlplus -s $DBUSER/$DBPASSWORD <<EOF
set serverout on
set linesize 1000
set feedback off
BEGIN
DBMS_OUTPUT.PUT_LINE('inserting into mig_log');
INSERT INTO ROAMING_LOG VALUES(SYSDATE,'NEW RECORD CREATION IN BSCS',0,0,0,0,0,'No new Roaming Partner created.','N');
COMMIT;
END;
/
EOF
echo 'data inserted'
echo 'mail to sent'
echo -e "$BODY4"| mailx -s "$SUBJECT" ${TO_ADDRESS} -- -r ${FROM_ADDRESS}
echo 'mail sent'
fi
此代码段抛出错误
&#34; SP2-0042:未知命令&#34; EOF&#34; - 其余的行被忽略。&#34;
任何帮助将不胜感激..
答案 0 :(得分:4)
语法称为&#34; here document&#34;,并要求结束文档的整行等于用于启动文本的分隔符块。因此,要在任何外壳中工作,您必须对EOF
行进行修改或将分隔符更改为' EOF'
。
答案 1 :(得分:1)
结尾标记EOF
不应缩进。所以你需要将代码更改为
$ORACLEHOME/bin/sqlplus -s $DBUSER/$DBPASSWORD <<EOF
#some stuff here
EOF
如果您希望缩进heredoc的结束标记,并且如果您正在使用GNU-Bash
,则可以使用<<-
$ORACLEHOME/bin/sqlplus -s $DBUSER/$DBPASSWORD <<-EOF
#some stuff here
EOF
答案 2 :(得分:0)
使用这种脚本的简单方式
L=$(ORACLEHOME/bin/sqlplus -s $DBUSER/$DBPASSWORD <<EOF
#some stuff here
EOF)