2017-01-04 4 views
0

У меня есть сценарий bash, который я использую целую вечность. Он имеет несколько строк, которые он только запускает/останавливает некоторые задания в базе данных. Это очень просто и никогда не терпит неудачу. В прошлом году, это факты в декабре, так что несколько дней назад :) Я перенес все данные на новую машину. И затем моя проблема начинается. Теперь скрипт работает так, как раньше, но теперь он возвращает предупреждение. Ниже выхода:Как скрыть предупреждение в скрипте 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 

, но это не помогло :(

+1

@ user3863616, исправить здесь синтаксис документа. Попробуйте [это] (https://gist.github.com/d2ccbe03143c350f5b11fe4dc1914e8e), например. –

+0

Бинго, проблема решена ** ($ ** вместо ** '** спасибо! – user3863616

ответ

1

Предупреждение вызвана неверной here document синтаксиса А именно, второго предельного слова ("!".) отсутствует.

Кроме того, не использовать обратные кавычки для подстановки команд. используйте синтаксис $(...) вместо этого, так как он более читаемым, и это может быть вложенными.

Фиксированный версия:

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

Отметим, что документ здесь заканчивается строкой, содержащей только предельное слово (восклицательный знак, в частности). Например, не допускается, например, отступы второго предельного слова.

+0

ваше последнее замечание, вероятно, самое важное :) нет пробелов до и после восклицательного знака – user3863616

Смежные вопросы