Importante

Você está vendo a versão anterior da nova experiência da Alura que estamos preparando para você. Em breve, ela ganha uma identidade visual novinha totalmente pensada em potencializar seus estudos!

2
respostas

[Dúvida] Meu script não está gerando o arquivo logs combinados

O script está identico ao mencionado na aula mas removo os arquivos da pasta de logs-processados com o rm log*.
em seguida rodo o script e ao retornar a pasta só há um arquivo criado.

Se deixo o cat "${arquivo}.unico" >> "${ARQUIVO_DIR}/logs_combinados_$(date +%F).log" também fora do script da certo

echo "Arquivo: $nome_arquivo" >> "${ARQUIVO_DIR}/log_stats_$(date +%F).txt"
echo "Número de linhas: $num_linhas" >> "${ARQUIVO_DIR}/log_stats_$(date +%F).txt"
echo "Número de palavras: $num_palavras" >> "${ARQUIVO_DIR}/log_stats_$(date +%F).txt"
echo "--------------------------" >> "${ARQUIVO_DIR}/log_stats_$(date +%F).txt"

if [[ "$nome_arquivo" == *frontend* ]]; then
    sed 's/^/[FRONTEND] /' "${arquivo}.unico" >> "${ARQUIVO_DIR}/logs_combinados_$(date +%F).log"
elif [[ "$nome_arquivo" == *backend* ]]; then
    sed 's/^/[BACKEND] /' "${arquivo}.unico" >> "${ARQUIVO_DIR}/logs_combinados_$(date +%F).log"
else
    cat "${arquivo}.unico" >> "${ARQUIVO_DIR}/logs_combinados_$(date +%F).log" 
fi

done

O que poderia ser?

2 respostas

Ola! a lógica do if/elif/else parece correta. O ponto que mais chama atenção é o done: se esse bloco estiver dentro de um for, precisamos ver a parte anterior do script, principalmente como arquivo e nome_arquivo são definidos e como o loop percorre os arquivos. Isso ajuda a identificar por que apenas um arquivo chega ao logs_combinados.

Uma possibilidade é que o problema esteja no fluxo do processamento, e não no sed ou no cat. Como você comentou que este comando funciona quando executado fora do script:

cat "${arquivo}.unico" >> "${ARQUIVO_DIR}/logs_combinados_$(date +%F).log"

vale conferir qual é o valor de arquivo a cada volta do loop. Uma boa forma de testar é colocar temporariamente antes do if:

echo "Processando: $arquivo"
echo "Nome: $nome_arquivo"

Se aparecer apenas um arquivo no terminal, o problema está no loop/processamento anterior. Se aparecerem vários, aí podemos investigar as condições do if e a criação dos arquivos .unico.

Se você enviar o script completo, vai ajudar mais.

Obrigado vou providenciar o envio