O shell executará divisão de palavras em $(cat $Errors)
. É por isso que você recebe uma palavra de cada vez, em vez de uma linha de cada vez.
Você deseja um loop while read...
:
while read -r line; do
#Get Error Logs
grep "$line" /home/eximlog >> $Elogs
done <"$Errors"
read
é orientado a linha: lê uma linha por vez.
Ou, isso pode funcionar para você e não precisa de nenhum loop:
grep -f "$Errors" /home/eximlog
As opções -f
informam grep
para ler padrões de um arquivo, um padrão por linha.
Além disso, parece-me que seus padrões de código de erro são sequências fixas e não expressões regulares. Nesse caso, para evitar surpresas desagradáveis, adicione a opção -F
a grep
:
grep -Ff "$Errors" /home/eximlog