проблемы при чтении файла журнала с хвостом -n0 -F - PullRequest
0 голосов
/ 19 сентября 2019

Я отслеживаю файл журнала звездочки для тех пиров, которые отключены.часть if работает правильно, но команда sed не выполняется в части else, хотя команда echo работает.Что мне нужно изменить

tail -n0 -F /var/log/asterisk/messages | \
while read LINE
do
if echo "$LINE" | /bin/grep -q "is now UNREACHABLE!"
then
EXTEN=$(echo $LINE | /bin/grep -o -P "(?<=\').*(?=\')")
echo "$EXTEN is now UNREACHABLE!"
CALLERID=$(/bin/sed -n '/^\['"$EXTEN"'\]/,/^\[.*\]/{/^callerid*/p}' "$SIP" | /usr/bin/awk -F'=' '{ print $2 }')
if [[ "$CALLERID" != *SIP* ]] && [[ "$CALLERID" != *HOME* ]]
then
  MATCH=$(/bin/grep "^$EXTEN;" "$CUR")
  if ! /bin/grep -qi "^$MATCH" $OFFLINE; then
    echo "$MATCH" >> $OFFLINE
  fi
fi
elif echo "$LINE" | /bin/grep -q "is now REACHABLE!"
then
EXTEN=$(echo $LINE | /bin/grep -o -P "(?<=\').*(?=\')")
echo "$EXTEN is now REACHABLE!"
if /bin/grep -qi "^$EXTEN;" $OFFLINE; then
  /bin/sed -i '/^$EXTEN;/d' $OFFLINE
fi
fi
done

1 Ответ

2 голосов
/ 20 сентября 2019

У вас есть проблема с кавычками - вы использовали одинарные кавычки, когда строка содержит переменную оболочки:

if /bin/grep -qi "^$EXTEN;" $OFFLINE; then
  /bin/sed -i '/^$EXTEN;/d' $OFFLINE
fi

Попробуйте вместо этого использовать двойные кавычки:

if /bin/grep -qi "^$EXTEN;" $OFFLINE; then
  /bin/sed -i "/^$EXTEN;/d" $OFFLINE
fi
...