2016-12-28 4 views
1

Я получаю следующую ошибку при запуске над командой из сценария оболочки в CYGWIN.`sed: -e выражение # 1, char 1: unknown command:`, '`

Ошибка:

sed: -e expression #1, char 1: unknown command: `,'

ЕСЛИ Я побежал команду в CMD:

$ sed -n "8937,8946 p" "/cygdrive/c/TEMP/temp_oracle/alert_cert1_copy.log" | egrep -e "ORA-|Shutting down" 

Он работает OK - Результат:

ORA-1623 signalled during: ALTER DATABASE DROP LOGFILE GROUP 1... 
Shutting down database 

ПРИМЕЧАНИЕ: 8937 & 8946 являются номера строк текстовый файл - там, где необходимо проверить шаблоны. Поиск должен быть между этими линиями.

ЕСЛИ Я запускаю команду из сценария оболочки - появляется ошибка выше.


Shell Script:

export alert_file="/cygdrive/c/TEMP/temp_oracle/alert_cert1_copy.log" 
    export alert_output="/cygdrive/c/cygwin64/home/alert_out.log" 

     function searchAlertByFilterLN() { 
      #err1=$(sed -n "${lastLineNum},${totLines} p" $alert_file | egrep -e "ORA-") 
      err1=$(sed -n "8937,8946 p" $alert_file | egrep -e "ORA-|Shutting down") 
       if [ -n "$err1" ]; then 
       echo -e "Errors found:" > $alert_output 
       echo ------------  >> $alert_output 
       sed -n "8937,8946 p" $alert_file | egrep -e "ORA-|Shutting down" >> $alert_output 
       echo "" >> $alert_output 
       echo "" >> $alert_output 
       echo -e "Check the details of the errors below. (Details means the surroundig lines of the error message only)" >> $alert_output 
       echo "-------------------------------------" >> $alert_output 
       sed -n "8937,8946 p" $alert_file | /usr/bin/egrep -A 5 -B 2 "ORA-|Shutting down" >> $alert_output 
       fi 
     } 

searchAlertByFilterLN -- 
echo "function was executed" 

С уважением!

+0

Скопируйте и вставьте содержимое вашего сценария, и как вы используете скрипт? – Inian

+0

не заставляйте нас угадывать, покажите вам фактический код сценария, который не сработает. Бьюсь об заклад, вы используете 'sed -n '$ startLineNo, $ endLineNo p" файл "или аналогичный, и что либо варны имеют орфографическую ошибку, либо по какой-то другой причине один или оба не имеют значений. Вы знаете о режиме отладки оболочки, при этом 'set -vx' (и' set + vx' отключается). Это покажет вам строку как выполненную ** с заменой ** переменных на их значения. Удачи. – shellter

+0

Также прочитайте http://stackoverflow.com/help/how-to-ask, http://stackoverflow.com/help/dont-ask, http://stackoverflow.com/help/mcve и возьмите [ tour] (http://stackoverflow.com/tour), прежде чем отправлять больше вопросов здесь. Удачи. – shellter

ответ

1

Используйте правильные двойные кавычки вокруг переменных в сценарии, чтобы избежать shell неправильного толкования ваших косых черт (/), новых строк и разбиения слов. Все ваши переменные, используемые в вашем скрипте, отсутствуют.

Исправленная версия вашего скрипта должно быть что-то вроде

#!/bin/bash 

export alert_file="/cygdrive/c/TEMP/temp_oracle/alert_cert1_copy.log" 
export alert_output="/cygdrive/c/cygwin64/home/alert_out.log" 

function searchAlertByFilterLN() { 
    #err1=$(sed -n "${lastLineNum},${totLines} p" $alert_file | egrep -e "ORA-") 
    err1=$(sed -n "8937,8946 p" "$alert_file" | egrep -e "ORA-|Shutting down") 
    if [ -n "$err1" ]; then 
     echo -e "Errors found:" > "$alert_output" 
     echo ------------  >> "$alert_output" 
     sed -n "8937,8946 p" "$alert_file" | egrep -e "ORA-|Shutting down" >> $alert_output 
     echo "" >> "$alert_output" 
     echo "" >> "$alert_output" 
     echo -e "Check the details of the errors below. (Details means the surroundig lines of the error message only)" >> "$alert_output" 
     echo "-------------------------------------" >> "$alert_output" 
     sed -n "8937,8946 p" "$alert_file" | /usr/bin/egrep -A 5 -B 2 "ORA-|Shutting down" >> "$alert_output" 
    fi 
} 

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