如何在 bash 脚本中隐藏警告

how to hide warning in bash script

我有一个 bash 脚本,我已经使用了很长时间。它只有几行 start/stop 数据库中的一些作业。它非常简单,而且永远不会失败。去年,事实是在 12 月,所以几天前 :) 我将整个数据迁移到一台新机器上。然后我的问题开始了。 现在脚本像以前一样工作,但现在它 returns 警告。输出以下:

[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 ~]$

warning中提到的这段代码是:

batch_stop()
{
  for BATCH in $BATCHES
  do
    SQLRES=`sqlplus -S "/ as sysdba" << !
      exec dbms_scheduler.disable('"AIT"."${BATCH}"', TRUE);
   `     << line 87
  done
}

所以问题是如何avoid/hide这个警告。这并不重要,脚本可以正常工作,但警告会干扰视图。我看到之前我有 bash 版本 3.2.25,但现在是 bash 4.1.2。

我尝试修改我的代码并重定向输出:

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

但没有帮助:(

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

另外,不要在命令替换中使用反引号。请改用 $(...) 语法,因为它更具可读性,并且可以嵌套。

固定版本:

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

请注意,此处文档以仅包含限制词(尤其是感叹号)的一行结尾。所以不允许缩进第二个限制字,例如