我有一个我已经使用了很长时间的bash脚本。它有几行只是启动/停止数据库中的一些工作。它非常简单,永远不会失败。去年12月的情况就这样了几天前:)我将整个数据迁移到了新机器上。然后我的问题开始了。 现在脚本按原样工作,但现在它返回警告。输出如下:
[oracle@SVMSLUATTIADB1 ~]$ ./batch.sh stop
./batch.sh: line 87: warning: here-document at line 85 delimited by end-of-file (wanted `!')
./batch.sh: line 87: warning: here-document at line 85 delimited by end-of-file (wanted `!')
Batch_Executer_1 [NOT OK]
Batch_Executer_2 [NOT OK]
[oracle@SVMSLUATTIADB1 ~]$
警告中提到的一段代码是:
batch_stop()
{
for BATCH in $BATCHES
do
SQLRES=`sqlplus -S "/ as sysdba" << !
exec dbms_scheduler.disable('"AIT"."${BATCH}"', TRUE);
` << line 87
done
}
所以问题是如何避免/隐藏此警告。它并不重要,脚本可以工作,但是警告的观点令人不安。我看到之前我有bash版本3.2.25,但现在它是bash 4.1.2。
我试图修改我的代码并重定向输出:
{SQLRES=`sqlplus -S "/ as sysdba" << !
exec dbms_scheduler.disable('"AIT"."${BATCH}"', TRUE);
` } 2>/dev/null
但它没有帮助:(
答案 0 :(得分:1)
警告是由无效的here document语法引起的。即,缺少第二个限制词("!"
)。
此外,不要使用后引号进行命令替换。使用$(...)
语法,因为它更具可读性,并且可以嵌套。
固定版本:
SQLRES=$(sqlplus -S "/ as sysdba" << !
exec dbms_scheduler.disable('"AIT"."${BATCH}"', TRUE);
!
)
注意,此处的文档以仅包含限制词(特别是感叹号)的行结束。因此,例如,不允许缩进第二个限制词。