saída inesperada do script bash

4

Eu escrevi um script bash para salvar imagens de uma transmissão ao vivo. O url streaming é um arquivo jpeg de atualização, então eu escrevi uma variável para fazer um nome de arquivo da época. O roteiro faz duas coisas que espero que alguém possa esclarecer para mim. Primeiro, as imagens salvas usando a variável filename não são legíveis como imagens.

Segundo, há arquivos sendo salvos, mas os nomes não são o que eu quero.

a fonte do script é:

#!/bin/bash

    while true; do
          date='date +%s'
          ext=.jpg
          fname=$date$ext
          wget http://rawcam.ele.uri.edu/tmpfs/image.jpg -o $fname
          sleep 100
    done

and here is output:
$ ls
1489453852.jpg  1489453964.jpg  image.jpg    image.jpg.5  uri.sh
1489453951.jpg  1489453968.jpg  image.jpg.1  image.jpg.6
1489453954.jpg  1489453971.jpg  image.jpg.2  image.jpg.7
1489453958.jpg  1489453975.jpg  image.jpg.3  image.jpg.8
1489453961.jpg  1489453978.jpg  image.jpg.4  image.jpg.9

o que estou fazendo errado? Eu só quero salvar o arquivo image.jpg, a cada poucos segundos, com o nome do arquivo como a época em que aconteceu.

    
por j0h 14.03.2017 / 02:23

1 resposta

4

Conforme explicado por @steeldriver, a opção precisa ser uma letra maiúscula O para o arquivo de saída. Como regra geral, ao lidar com nomes de arquivos e outras strings, em um script, é melhor ser seguro e colocá-los entre aspas. Isso evita algumas coisas que o shell pode fazer inesperadamente. A versão modificada do seu script é:

#!/bin/bash

while true; do
      date='date +%s'
      ext=".jpg"
      fname="$date$ext"
      wget http://rawcam.ele.uri.edu/tmpfs/image.jpg -O "$fname"
      sleep 100
done

O que estava acontecendo era que a época com .jpg foi usada para criar o nome do arquivo que foi usado como o arquivo de log para essa execução do comando wget . wget estava baixando o arquivo image.jpg , e para evitar que o download anterior fosse "clivado", adicionamos os números incrementados, informando em .1 , a cada nome.

* a invasão é quando um novo arquivo sobrescreve um arquivo existente com o mesmo nome.

    
por Gypsy Spellweaver 14.03.2017 / 02:41