Variável retornando valores com \r/ [RESOLVIDO]

1. Variável retornando valores com \r/ [RESOLVIDO]

Lucas Rodrigues
badtrip

(usa Ubuntu)

Enviado em 03/01/2015 - 14:24h

Boa tarde,

Pesquisando e queimando algumas horas sem obter resultados, peço que o conhecimento de vocês termine com essa minha novela, haha

Estou tentando fazer meu primeiro script, que aleatóriamente selecione um diretório e copie seu conteudo para outro diretório fixo. Porém um erro persiste. Segue o feito:

#!/bin/bash
num=$((RANDOM%7))
echo $num
cp -f /var/www/html/image/$num/banner.jpg /var/www/html/images


Porém, ao executar o .sh, recebo isso:



cp: impossível obter estado de “/var/www/html/image/1\r/banner.jpg”: Arquivo ou diretório não encontrado

Pois aquele "r" é adicionado.

Muito obrigado.







  


2. Re: Variável retornando valores com \r/ [RESOLVIDO]

Carlos A. P. Cunha
Carlos_Cunha

(usa Linux Mint)

Enviado em 03/01/2015 - 18:15h

Na Saida do echo $1 , esta somente aparecendo o numero gerado pelo RANDOM ?


3. Re: Variável retornando valores com \r/ [RESOLVIDO]

Lucas Rodrigues
badtrip

(usa Ubuntu)

Enviado em 03/01/2015 - 23:32h

Sim, aparece somente o número gerado, sem "r". Esse r aparece apenas no "cp".


4. Re: Variável retornando valores com \r/ [RESOLVIDO]

Perfil removido
removido

(usa Nenhuma)

Enviado em 04/01/2015 - 00:13h

badtrip escreveu:

Sim, aparece somente o número gerado, sem "r". Esse r aparece apenas no "cp".


Realmente muito estranho.

Poderia executar o seguinte comando:

LANG=en_US bash -x script.sh 2>&1 | cat -A

e postar aqui a saída?



5. Re: Variável retornando valores com \r/

Geraldo Albuquerque
aprendinolinux

(usa Ubuntu)

Enviado em 04/01/2015 - 08:27h

Ola @badtrip, bora lá ver o que tá pegando.

 num=$((RANDOM%7))  


Você quer pegar um número inteiro randômico variando de 1 a 7 é isso ?

echo $num
Mostrando o número...

 cp -f /var/www/html/image/$num/banner.jpg /var/www/html/images  


Está usando o parâmetro -f que vai remor arquivo destino antes de copiá-lo caso não haja permissão para escrita.
é isso mesmo q vc quer ? Perigoso rsrs

cp: impossível obter estado de “/var/www/html/image/1\r/banner.jpg”: Arquivo ou diretório não encontrado


uma dica.
Em operações com diretórios, evite usar a variável desta forma $num , tente protege-la com aspas sempre que possível.
Costumo usar assim: "${num}", ou assim para o seu caso:
No teu caso, está usando um número e não deveria dar problema.
Mas vamos imaginar que após o número exista um espaço ?
Colocando aspas, ele vai mostrar este espaço e usa-lo.

cp "/var/www/html/image/${num}/banner.jpg" /var/www/html/images

Uma boa alternativa seria vc dar um ls (listar) para saber se existe essa imagem.
Poderia fazer uma função e só executar o comando se encontrar a imagem na origem.
Já para o destino, só precisa ter certeza que o diretório existe.

Por favor, pesquise sobre o comando test

Vá passando mais detalhes e a galera vai ajudando.
Coloque suas dúvidas tranquilamente, mas de preferência, coloque os comandos e resultados para termos certeza que a imagem aleatória com este numeral existe mesmo.

ps: que tal colocar em uma variável para saber o que está pegando ?
minhavar="/var/www/html/image/${num}/banner.jpg"
echo $minhavar

Vai que está mostrando o número e depois um espaço ?









6. Re: Variável retornando valores com \r/ [RESOLVIDO]

Lucas Rodrigues
badtrip

(usa Ubuntu)

Enviado em 04/01/2015 - 14:21h

Muito obrigado a todos.
Segui atentamente todas as dicas, porém o r continuava a aparecer...
Consegui resolver o problema utilizando o dos2unix! Bastou para que o .sh funcionasse corretamente.

No final, o script acabou ficando assim:

#!/bin/bash
num=$((RANDOM%12))
echo $num
cp -f "/var/www/html/images/${num}/banner.jpg" /var/www/html/images




7. Re: Variável retornando valores com \r/ [RESOLVIDO]

Perfil removido
removido

(usa Nenhuma)

Enviado em 04/01/2015 - 17:57h

badtrip escreveu:

Muito obrigado a todos.
Segui atentamente todas as dicas, porém o r continuava a aparecer...
Consegui resolver o problema utilizando o dos2unix! Bastou para que o .sh funcionasse corretamente.


Pessoalmente, considero o 'dos2unix' um "inutilitário" porque o 'sed' resolve facilmente este tipo de problema.


No final, o script acabou ficando assim:

#!/bin/bash
num=$((RANDOM%12))


Então o problema ocorria aqui nesta atribuição. Existia lixo no final da linha e este era concatenado com o resultado de "$((...))" para dentro da variável 'num'.


echo $num


Você iria precisar do 'hexdump' ("0d") ou de um 'cat -A' ("^M") para visualizar o "\r" na saída do 'echo'.


cp -f "/var/www/html/images/${num}/banner.jpg" /var/www/html/images










Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts