1
resposta

Não estou conseguindo tratar os erros e colocar nos logs

Ao criar a função e redirecionar os erros para o log, não está gerando. E quando coloco algum erro no script para testar, a mensagem de operação executada com sucesso ainda aparece, mesmo com erro.

Segue meu código abaixo:

#!/bin/bash

funcao_converte(){
cd ~/Downloads
if [ ! -d imagens-livros-png ]
then
    mkdir imagens-livros-png
    echo "Diretorio nao encontrado, criando..."
    sleep 1
else
    echo "Diretório já existe..."
    sleep 1
fi
cd ~/Downloads/imagens-livros
echo "Abrindo diretório origem..."
local destino=~/Downloads/imagens-livros-png
echo "Gravando diretorio destino..."
sleep 1
local cont=$(ls|wc -l)
echo "Foram encontrados "$cont" ocorrências para converter"
for imagem in *.jpg
    do
        local imagem_sem_jpg=$(ls $imagem|awk -F. '{print $1}')
        if [ ! -e "$destino/$imagem_sem_jpg.png"  ]
            then                
                convert $imagem_sem_jpg.jpg $destino/$imagem_sem_jpg.png 2>log_exec.txt
                if [ $? -eq 0 ]
                    then
                        echo "Convertendo arquivo..."$imagem_sem_jpg
                    else
                        echo "Erro ao converter o arquivo: "$imagem_sem_jpg
                fi
            else
                echo "Ja existe o arquivo "$imagem_sem_jpg.png" no diretório "$destino
        fi
    done
}

funcao_converte 2>log_conversor.txt
if [ $? -eq 0 ]
then
    echo "Operação realizada com sucesso"
else
    echo "Erro na operação"
fi
1 resposta

Olá,

A função pode retornar um valor 0 a 255, sendo que 0 indica que a tarefa foi executada com sucesso e os demais valores representam erros. Nessa parte do código:

 if [ $? -eq 0 ]
                    then
                        echo "Convertendo arquivo..."$imagem_sem_jpg
                    else
                        echo "Erro ao converter o arquivo: "$imagem_sem_jpg
                fi

Você pode colocar esse retorno para a chamada da função:

 if [ $? -eq 0 ]
                    then
                        echo "Convertendo arquivo..."$imagem_sem_jpg
                        return 0
                    else
                        echo "Erro ao converter o arquivo: "$imagem_sem_jpg
                            return 1
                fi

Com isso deverá ser impresso "Erro na operação" caso tenha caída na condição do else dentro da função.

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software