bash 스크립트에서 wget을 실행하고 변수에 URL을 저장하는 데 문제가 있습니다.

bash 스크립트에서 wget을 실행하고 변수에 URL을 저장하는 데 문제가 있습니다.

다음 bash 스크립트가 있습니다.

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

문제는 스크립트를 실행할 때 wget이 항상 빈 파일을 다운로드한다는 것입니다.

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 

그러나 에코된 URL은 유효합니다(명령줄에서 이 URL을 사용하여 wget을 실행하면 zip 패키지가 다운로드됩니다).

왜 이런 일이 발생합니까?

답변1

여기서 두 가지 문제가 발생했습니다.

  1. 변수를 인용하지 않았으므로 쉘이 값을 손상시킬 수 있습니다. 나는 당신의 스크립트에 대한 대체 제안을 제공할 것입니다.공백 제거.

  2. 정규식을 사용하여 XML을 처리하고 있습니다. 이는 일시적으로 작동하지만 나중에 예기치 않은 변경이 발생하면 중단될 가능성이 높다는 점에 유의하세요.

코드는 아래와 같이 표시됩니다.

#!/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>.*,\1,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"

답변2

이 상황을 디버깅하는 방법은 다음과 같습니다.

  1. 어떤 쉘이 스크립트를 실행하고 있습니까? 놓다 "#!"작동하는 쉘로(명령줄에서 작동한다고 말했잖아요)
  2. "wget"을 직접 실행하도록 스크립트를 변경하면URL", 어디URL이 하드코딩되어 있습니다.출력 $URL에 파일을 가져오나요?
  3. 당신이 취하면다른 URL다른 사이트에서는 작동하나요?
  4. 혹시 해당 사이트에 접속이 되신다면 확인해 주실 수 있나요?액세스 로그 및 오류 로그웹 서버?
  5. 무엇인가요종료 상태왜? "echo $?"가 무엇인지 아는 것이 도움이 됩니다. 표시하다, 비교하다http://www.gnu.org/software/wget/manual/wget.html#Exit-Status

관련 정보