1
resposta

Shell Scripting dando falha

Olá, estou com dúvidas em relação ao script do curso, referente à aula 3.4.

#!/bin/bash

converte_imagem(){
    local caminho_imagem=$1
    local imagem_sem_extensao=$(ls $caminho_imagem | awk -F. '{ print $1 }')
    convert $imagem_sem_extensao.jpg $imagem_sem_extensao.png
}

varrer_diretorio(){
    cd $1
    for arquivo in *
    do
        local caminho_arquivo=$(find ~/Downloads/imagens-novos-livros -name "$arquivo")
        if [ -d $caminho_arquivo ]
        then
            varrer_diretorio $caminho_arquivo
        else
            converte_imagem $caminho_arquivo
        fi
    done
}

varrer_diretorio ~/Downloads/imagens-novos-livros
if [ $? -eq 0 ]
then
        echo 'Operacao realizada com sucesso'
else
        echo 'Houve uma falha na operacao'
fi

Esse foi o código que escrevi, igual ao do professor e esta foi a saída que me retornou:

"convert-im6.q16: no images defined `/mnt/c/Users/juliane.png' @ error/convert.c/ConvertImageCommand/3258"

Foi no fórum e acabei achando uma solução para meu problema: https://cursos.alura.com.br/forum/topico-erro-nao-encontra-arquivo-160032#955553 A solução funciona, mas não consegui entender muito bem o motivo, poderiam, me explicar o porquê deu erro e porque a solução do Luis funciona?

1 resposta

O nome da sua home é juliane.rodrigues ou juliane.souza? Split na programação, separa uma string(sequência) recebendo como parâmetro um caractere. O problema está no parâmero -F do awk. Ele diz qual separador o awk tem que usar, no caso ".".

Se você imprimir o $caminho_imagem deve ver algo do tipo: /mnt/c/Users/juliane.souza/Downloads/imagens-novos-livros/imagem.png

"splitando" essa string, teremos 3 "substrings":

  • /mnt/c/Users/juliane
  • souza/Downloads/imagens-novos-livros/imagem
  • png

A primeira substring é $1, a segunda $2, a terceira $3. Se seu diretório home não tivesse '.', você não teria encontrado esse problema. No seu script, o convert tenta encontrar imagem '/mnt/c/Users/juliane.png' que é o $1.jpg. Como não há imagem com esse nome, dá erro. Espero ter ajudado, mesmo sendo uma dúvida de 2 semanas.

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