如何在bash脚本中隐藏警告

时间:2017-01-04 11:44:58

标签: bash warnings

我有一个我已经使用了很长时间的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

但它没有帮助:(

1 个答案:

答案 0 :(得分:1)

警告是由无效的here document语法引起的。即,缺少第二个限制词("!")。

此外,不要使用后引号进行命令替换。使用$(...)语法,因为它更具可读性,并且可以嵌套。

固定版本:

SQLRES=$(sqlplus -S "/ as sysdba" << !
exec dbms_scheduler.disable('"AIT"."${BATCH}"', TRUE);
!
)

注意,此处的文档以仅包含限制词(特别是感叹号)的行结束。因此,例如,不允许缩进第二个限制词。