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.









Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts