Variavel com conteudo inexplicavel ! [RESOLVIDO]

1. Variavel com conteudo inexplicavel ! [RESOLVIDO]

Matheus Rodrigues de Carvalho
matheusrsp

(usa Ubuntu)

Enviado em 10/10/2021 - 17:17h

Tudo bem pessoal

Estou estudando um pouco mais a fundo sobre shell script, ao criar um programa onde eu extraio informações de um site e envio para um arquivo de texto, eu me deparo com a seguinte situação.

No arquivo de texto a extração da URL é feito corretamente, se a mesma URL for colado no terminal e executada em combinação com o comando "wget" ela baixa a imagem da URL corretamente.
Porem quando eu executo o script simplismente me retorna o erro 400 Bad request, ao debugar o Script com o comando bash -x eu reparei que o que estava sendo passando para o "wget" era a URL porem tinha um $' no inicio e um \r' que não existiam no arquivo de texto extraido da internet.

Eu estou usando o laço while combinado ao comando read -r para ler o arquivo de texto.
Ja tentei de varias formas, mas o $' e o \r' não saem dali de jeito nenhum.
Porem eu tambem observei que ao entrar no arquivo copiar todo o conteudo com CTRL+A e colar em outro arquivo o Script roda normalmente pois o $' e o \r' não aparecem mais.

Alguem saberia me dizer se estou fazendo alguma coisa de errado.

Desde ja agradeço !!!


  


2. MELHOR RESPOSTA

Cesar
cerebro_pinky

(usa Outra)

Enviado em 10/10/2021 - 19:54h

Normal, cara! EU tenho um script que grepa o conteúdo de urls e realmente não pode haver um \r na URL, se não o cURL e o Wget não vão conseguir ler a URL direito.

Então faça algo como:

read -r linha

wget "${linha//$'\r'}"

O código acima vai remover todos os caratceres \r da variável quando for expandida...

A notação $'..' é um tipo de citação especial da shell. O conteúdo da palavra é expandido com a interpretação de caracteres com barra invertida trocadas como especificados no padrão ANSI C.

$ echo $'este é um exemplo\n com quebras de linhas\n sem a opção -e do echo!\a\n\n'
este é um exemplo
com quebras de linhas
sem a opção -e do echo!


$ var=$'variável com\n linha em branco adicional no final\n'
$ echo "$var"
variável com
linha em branco adicional no final



3. Script

Matheus Rodrigues de Carvalho
matheusrsp

(usa Ubuntu)

Enviado em 10/10/2021 - 17:19h

Este é o script que eu fiz eu ainda preciso formatar ele não reparem muito na formatação código



4. Re: Variavel com conteudo inexplicavel ! [RESOLVIDO]

Marcelo Oliver
msoliver

(usa Debian)

Enviado em 10/10/2021 - 18:19h


matheusrsp escreveu:

Tudo bem pessoal

Estou estudando um pouco mais a fundo sobre shell script, ao criar um programa onde eu extraio informações de um site e envio para um arquivo de texto, eu me deparo com a seguinte situação.

No arquivo de texto a extração da URL é feito corretamente, se a mesma URL for colado no terminal e executada em combinação com o comando "wget" ela baixa a imagem da URL corretamente.
Porem quando eu executo o script simplismente me retorna o erro 400 Bad request, ao debugar o Script com o comando bash -x eu reparei que o que estava sendo passando para o "wget" era a URL porem tinha um $' no inicio e um \r' que não existiam no arquivo de texto extraido da internet.

Eu estou usando o laço while combinado ao comando read -r para ler o arquivo de texto.
Ja tentei de varias formas, mas o $' e o \r' não saem dali de jeito nenhum.
Porem eu tambem observei que ao entrar no arquivo copiar todo o conteudo com CTRL+A e colar em outro arquivo o Script roda normalmente pois o $' e o \r' não aparecem mais.

Alguem saberia me dizer se estou fazendo alguma coisa de errado.

Desde ja agradeço !!!

Matheus, boa noite.
Poste os arquivos, shell script, etc....
em texto, use o </> para ficar "encodado",
Assim fica mais fácil te ajudar.....

A principio, o arquivo que copiou da internet, foi gerado no Windows, isso explica o \r.
Para visualizar os "caracteres ocultos do arquivo", faça:
cat -vet arquivo
Fim de linha padrão DOS.
echo -e "Texto\r\nTexto\r\n"|cat -vet

Padrão UNIX
echo -e "Texto\nTexto\n"|cat -vet



______________________________________________________________________
Importante:
lynx --dump https://www.vivaolinux.com.br/termos-de-uso/|sed -nr '/^[ ]+Se/,/dou.$/p'
______________________________________________________________________
Nota de esclarecimento:
O comando: ACIMA, faz parte da minha assinatura.
Att.: Marcelo Oliver
______________________________________________________________________



5. Re: Variavel com conteudo inexplicavel !

Matheus Rodrigues de Carvalho
matheusrsp

(usa Ubuntu)

Enviado em 10/10/2021 - 21:32h

Matheus, boa noite.
Poste os arquivos, shell script, etc....
em texto, use o </> para ficar "encodado",
Assim fica mais fácil te ajudar.....

A principio, o arquivo que copiou da internet, foi gerado no Windows, isso explica o \r.
Para visualizar os "caracteres ocultos do arquivo", faça:
cat -vet arquivo
Fim de linha padrão DOS.
echo -e "Texto\r\nTexto\r\n"|cat -vet

Padrão UNIX
echo -e "Texto\nTexto\n"|cat -vet



______________________________________________________________________
Importante:
lynx --dump https://www.vivaolinux.com.br/termos-de-uso/|sed -nr '/^[ ]+Se/,/dou.$/p'
______________________________________________________________________
Nota de esclarecimento:
O comando: ACIMA, faz parte da minha assinatura.
Att.: Marcelo Oliver
______________________________________________________________________
[/quote]

Muito obrigado pela ajuda brother me ajudou a enteder o problema, e obrigado pela dica vou começar trabalhar mais nas minhas postagens para ficar mais legivel e compreensivel as outros valeu.

PS: O link que você mandou esta dando como "pagina não encontrada" se puder enviar novamente eu agradeço




6. Re: Variavel com conteudo inexplicavel ! [RESOLVIDO]

Matheus Rodrigues de Carvalho
matheusrsp

(usa Ubuntu)

Enviado em 10/10/2021 - 21:37h


cerebro_pinky escreveu:

Normal, cara! EU tenho um script que grepa o conteúdo de urls e realmente não pode haver um \r na URL, se não o cURL e o Wget não vão conseguir ler a URL direito.

Então faça algo como:

read -r linha

wget "${linha//$'\r'}"

O código acima vai remover todos os caratceres \r da variável quando for expandida...

A notação $'..' é um tipo de citação especial da shell. O conteúdo da palavra é expandido com a interpretação de caracteres com barra invertida trocadas como especificados no padrão ANSI C.

$ echo $'este é um exemplo\n com quebras de linhas\n sem a opção -e do echo!\a\n\n'
este é um exemplo
com quebras de linhas
sem a opção -e do echo!


$ var=$'variável com\n linha em branco adicional no final\n'
$ echo "$var"
variável com
linha em branco adicional no final



Muito obrigado cara eu executei o script agora com a sua dica
wget  "${linha//$'\r'}" 
, executou como deveria.
Ja havia ouvido falar sobre o tema expansão de variavel mais não me aprofundei no assunto vou me aprofundar mais agora.