19
respostas

Saida sempre 0 mesmo com erros

Boa noite, estou na aula de tratamento de erros e mesmo forçando um erro no script, está me gerando saída sempre 0, veja meu código:

#!/bin/bash

converteImagem() {
cd /Users/paulojacinto/Documents/cursoshell/imagens-livros
    if [ ! -d png ]
    then
        mkdir png
    fi

    for imagem in *.jpg
    do
        local imagem_sem_extensao=$(ls $imagem | awk -F . '{ print $1 }')
        sips -s format png $imagem_sem_extensao.jpg --out png/$imagem_sem_extensao.png
    done
}

converteImagem 2> erros_conversao.txt

if [ $? -eq 0 ]
then 
    echo "Conversão realizada com sucesso"
else
    echo "Houve uma falha no processo"
fi

echo "Saida: " $?
19 respostas

O $? sempre pega o retorno do último comando, o último comando antes do echo "Saida: " $? é outro echo que foi executado sem problemas, para resolver isso será necessário armazenar o retorno em outra variável, logo após o comando que se deseja saber se foi bem sucedido. Algo assim:

converteImagem 2> erros_conversao.txt

RESULTADO=$?

if [ $RESULTADO -eq 0 ]
then 
    echo "Conversão realizada com sucesso"
else
    echo "Houve uma falha no processo"
fi

echo "Saida: " $RESULTADO

Deu o mesmo erro depois de alterado o código, qualquer coisa ele me retorna sempre 0, mesmo eu bugando o código do local do diretório, veja o meu código

#!/bin/bash

converteImagem() {
cd /Users/paulojacinto/Documents/cursoshell/imagens-livros
    if [ ! -d png ]
    then
        mkdir png
    fi

    for imagem in *.jpg
    do
        local imagem_sem_extensao=$(ls $imagem | awk -F . '{ print $1 }')
        sips -s format png $imagem_sem_extensao.jpg --out png/$imagem_sem_extensao.png
    done
}

converteImagem 2> erros_conversao.txt

RESULTADO=$?

if [ $RESULTADO -eq 0 ]
then 
    echo "Conversão realizada com sucesso"
else
    echo "Houve uma falha no processo"
fi

echo "Saida do Resultado: " $RESULTADO

Se entendi o que você quer não é só imprimir uma mensagem de saída diferente de 0, mas sim que o $? mostre algo diferente de 0 após executar o script, se for esse o caso adicione a seguinte linha no final:

exit $RESULTADO

Não deu certo, é que na aula ele erra de propósito o caminho da imagem, para dar o erro e teria que dar saída 1 e ele entrar no else do if, porém não dá certo, mesmo errando o caminho, ele gera saída 0 como se tudo estivesse OK

Estranho testei esse código com erro e funcionou aqui:

Insira aqui a descrição dessa imagem para ajudar na acessibilidade

#!/bin/bash

converteImagem() {
cd /Users/paulojacinto/Documents/cursoshell/imagens-livros
    if [ ! -d png ]
    then
        mkdir png
    fi

    for imagem in *.jpg
    do
        local imagem_sem_extensao=$(ls $imagem | awk -F . '{ print $1 }')
        sips -s format png $imagem_sem_extensao.jpg --out png/$imagem_sem_extensao.png
    done
}

converteImagem 2> erros_conversao.txt

RESULTADO=$?

if [ $RESULTADO -eq 0 ]
then 
    echo "Conversão realizada com sucesso"
else
    echo "Houve uma falha no processo"
fi

echo "Saida: " $RESULTADO
exit $RESULTADO

Estou usando mac, será que é por isso ? Ou não tem nada a ver ?

Veja a saída que aparece

Insira aqui a descrição dessa imagem para ajudar na acessibilidade

Mesmo eu bagunçando a constante que recebe o caminho das imagens, ele dá saida como sucesso 0

Entendi, nesse caso acredito que armazenar o resultado depois que invocar a função pode resolver, pois você quer sabe se a função foi executada com sucesso.

converteImagem 2> erros_conversao.txt

RESULTADO=$?

Mesma coisa, ele me trás o resultado da saída como 0, mesmo eu bagunçando o código ele entra no if como resultado=0 e fala que conversão realizada com sucesso

A única coisa que eu consigo imaginar aqui é o seguinte, quando ocorre o cd lá em cima para uma pasta inexistente o diretório atual não muda, continua no diretório onde o script está executando, se tiver algum jpg nesse diretório os comandos abaixo funcionam e o último dá um retorno positivo. Coloca um echo $imagem_sem_extensao ali depois da linha local para ver o que ele está fazendo.

Ele mostra o nome da imagem sem extensão na saída, e se alterar o caminho, nada muda rs

Insira aqui a descrição dessa imagem para ajudar na acessibilidade

Estranho é que fiz exatamente igual ao professor, e o dele dá certo, o meu não

Assisti a aula do professor e realmente a única diferença que vejo é que o script dele fica numa pasta totalmente diferente das imagens, coloca um comando pwd ali depois da linha com o comando cd para entender qual diretório o script está usando.

Veja a saída!

Insira aqui a descrição dessa imagem para ajudar na acessibilidade

Por isso que está funcionando, esse é o caminho onde estão as imagens, agora porque ele está pegando o caminho certo não faço ideia, coloca a pasta com as imagens em outro lugar, tipo a pasta de imagens do seu perfil de usuário e tenta executar com o caminho errado de novo, aí deve funcionar.

Sim, mas no caso eu deixei certo... segue agora a saída com o caminho forçando errado para ver se vai entrar na saída 1:

Insira aqui a descrição dessa imagem para ajudar na acessibilidade

Vou dar o braço a torcer, não tenho mais nenhuma ideia, não consegui reproduzir o cenário aqui. O arquivo erros_conversao.txt apresenta algum erro? Acho que vou usar a desculpa clássica dos desenvolvedores: "mas na minha máquina funciona".

kkkkkk boa rs, vou mexer com calma a noite se acho alguma coisa

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