Seu script usa o valor de $rc1
como um nome de arquivo, mas esta é a saída de grep
.
Para alimentar a saída do primeiro grep
em outro grep
, use um canal:
grep -v ... filename | grep ...
Em vez de salvar o resultado de grep
em variáveis (que podem ser bastante grandes), deixe o teste if
agir diretamente sobre o resultado da execução desse pipeline:
if grep -v -F 'Msg 2714' "$Logfilename" | grep -q -F Msg; then
echo 'Error message, some query has failed' >&2
exit 1
fi
Isso usa o status de saída do pipeline (que será o status de saída de grep -q
) para determinar se o script deve exibir a mensagem de erro e sair. Nenhum dado precisa ser armazenado em variáveis.
grep -q
não produzirá nada, mas sairá com sucesso se o padrão fornecido corresponder. Também usei -F
com as invocações de grep
, já que estamos combinando strings, não expressões regulares.
Também estou seguindo a diretriz geral de que as mensagens de erro são geradas no fluxo de erros padrão (com echo ... >&2
neste caso) e que o script terminará com um status de saída diferente de zero quando ocorrer um erro fatal.
Também possivelmente relevante, em relação à sua não-cotação de expansões variáveis: