Problema ao executar o wget dentro de um script bash com um url armazenado em uma variável

1

Estou com o seguinte script:

URL='grep -E -m 1 -o "<ExportCatalogResult>(.*)</ExportCatalogResult>" costa_export.xml| sed -e 's,.*<ExportCatalogResult>\([^<]*\)</ExportCatalogResult>.*,,g'' &&
echo $URL 
echo -n $url > url.txt &&
wget $(cat url.txt | tr -d " \t\n\r") -O price.zip

O problema é que, ao executar o script, o wget está sempre baixando um arquivo vazio:

http://training.******.net/WAWS_1_9/Catalog/price.zip //echo $URL

Resolving training.******.net (training.*******.net)... 194.**.***.90, 194.**.***.90

Connecting to training.******.net (training.*****.net)|194.**.***.90|:80... connected.

HTTP request sent, awaiting response... 204 Still exporting

Length: 0

Saving to: ‘price.zip’

[ <=>                                                ] 0           --.-K/s   in 0s 

No entanto, o URL que é ecoado é válido (executar um wget com esse URL na linha de comando fará o download do pacote zip).

Por que isso está acontecendo?

    
por sica07 03.08.2015 / 11:24

2 respostas

1

Dois problemas surgem aqui:

  1. Você não citou suas variáveis, então o shell está potencialmente atrapalhando os valores. Vou lhe dar uma sugestão alternativa para o seu script, que se baseia na remoção do espaço em branco .

  2. Você está processando XML com expressões regulares. Isso funcionará por enquanto, mas esteja ciente de que isso pode acontecer no futuro quando algo inesperado mudar.

O código segue

#!/bin/bash

# ...

# Not even going to attempt to reduce this without seeing your XML
url=$(grep -E -m 1 -o "<ExportCatalogResult>(.*)</ExportCatalogResult>" costa_export.xml| sed -e 's,.*<ExportCatalogResult>\([^<]*\)</ExportCatalogResult>.*,,g')

# Debug
echo "raw: $url" >&2

# Strip leading and trailing whitespace
url="${url#"${url%%[![:space:]]*}"}"   # remove leading whitespace
url="${url%"${url##*[![:space:]]}"}"   # remove trailing whitespace

# More debug
echo "now: $url" >&2

# Save the URL
echo -n "$url" > url.txt

# Retrieve the URL contents
wget -O price.zip "$url"
    
por 03.08.2015 / 12:38
1

Minha maneira de depurar esta situação:

  1. Qual shell está executando seu script? Coloque o " #! " no shell onde ele funciona (você disse que funciona na linha de comando)
  2. Se você alterar seu script para Executar diretamente "wget URL ", onde URL é codificado para a saída $ URL, ele obterá o arquivo?
  3. Se você pegar algum outro URL de algum outro site, isso funcionará?
  4. Se você tiver acesso ao website, poderá verificar os registros de acesso & logs de erros do servidor web?
  5. O que é o status de saída do wget? Isso ajudará a saber o que "echo $?" mostra, para comparar com o link
por 03.08.2015 / 13:18

Tags