2017-01-04 17 views
0

私は年齢のために使ってきたbashスクリプトを持っています。それは、データベース内のいくつかのジョブを開始/停止するだけの行がいくつかあります。それは非常に簡単で、決して失敗しません。昨年12月の事実は数日前です:)私は新しいデータに全データを移行しました。そして、私の問題が始まります。 スクリプトは以前と同じように動作しますが、警告を返します。出力の下には:bashスクリプトで警告を非表示にする方法

[[email protected] ~]$ ./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] 

[[email protected] ~]$ 

警告に記載されたコードの一部は次のとおりです。

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 

が、それは警告が無効here document構文によって引き起こされる:(

+1

@ user3863616ここでは、ドキュメントの構文を修正します。たとえば、[this](https://gist.github.com/d2ccbe03143c350f5b11fe4dc1914e8e)を試してみてください。 –

+0

ビンゴ、問題解決**(** ** **の代わりに** ** **ありがとう! – user3863616

答えて

1

助けにはならなかったすなわち、第2リミット・ワード("!"。 )がありません。

また、コマンド置換には引用符を使用しないでください。読みやすく、ネストすることができるため、代わりに$(...)構文を使用してください。

固定バージョン:

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

注、ここで文書は、(特に、感嘆符)のみ制限ワードを含む行で終了します。したがって、たとえば、2番目の制限単語をインデントすることはできません。

+0

あなたの最後の発言はおそらく最も重要です:)感嘆符前後のスペースなし – user3863616

関連する問題