2
respostas

Retorno da Função Sempre com valor 0

Mesmo forçando um erro no meu código (colocando diretório inválido), está me retornando o código "0", e exibindo a msg de "Conversao realizada com sucesso". O arquivo é criado, é inserida a mensagem de erro mas retorna como "Conversao realizada com sucesso". Se eu forço um erro diferente de diretório inválido, como por exemplo: "local imagem_sem_extensao= $(ls $imagem "), espaço após o "=" , ele ainda retorna 0, porém, entra no else, exibindo a msg de "Houve uma falha no processo".

#!/bin/bash

converte_imagem(){
cd ~/Downloads/imagens-livrosd

if [ ! -d png ] 
then
    mkdir png
fi

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

printf "$? \n"  # Coloquei esse trecho apenas para inserir a saída. Mesmo tirando esse trecho, ocorre erro na saída, retornando 0.

converte_imagem 2>Erros_conversao.txt


if [ $? -eq 0 ]
then
    echo "Conversao realizada com sucesso"
else
    echo "Houve uma falha no processo"
fi
2 respostas

Olá, Alex. Tudo bem?

Isso acontece porque o $? guarda o status do último comando realizado. O último comando nesse caso é converte_imagem 2>Erros_conversao.txt e o que ele faz é redirecionar os erros, então após redirecionar o status não é de erro, pois ele fez o que deveria. Por isso que o status é sempre 0.

Pra facilitar vc pode usar o return do bash, não testei então cabe testar na sua atividade.

onverte_imagem(){
cd ~/Downloads/imagens-livrosd

if [ ! -d png ] 
then
    mkdir png
fi

for imagem  in *.jpg
do
  local imagem_sem_extensao=$(ls $imagem | awk -F. '{ print $1 }')
  convert $imagem_sem_extensao.jpg png/$imagem_sem_extensao.png
  RESULT=$?
done
 return $RESULT
}

printf "$? \n"  # Coloquei esse trecho apenas para inserir a saída. Mesmo tirando esse trecho, ocorre erro na saída, retornando 0.

converte_imagem 2>Erros_conversao.txt


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