2012-02-28 5 views
2

리눅스에서 우리는 터미널에서 http_proxy의 변수를 export http_proxy=http://x.x.x.x:x으로 변경할 수 있습니다. 그러나 나는 대본을 가지고 그것을하고 싶다. 그래서 다음과 같은 코드가 있습니다 :Linux Bash 스크립팅 프록시 변수

#!/bin/bash 

FILE="_reliable_list.txt" 

for line in $(cat $FILE) 
do 
    proxy="http://$line" 
    export http_proxy=$proxy 
done 

변수 http_proxy의 값을 확인할 때 끝에는 null입니다. 파일 프록시 주소를 읽고 http_proxy 변수로 내보내고 wget과 함께 사용하고 싶습니다. 간단히이 코드를 자동화하고 싶습니다.

export http_proxy=http://x.x.x.x:x 
wget mysite.com 

다른 아이디어가 있으면 매우 기쁠 것입니다.

+0

왜 당신이 루프에서 프록시를 설정합니까? 입력 파일의 마지막 줄은 무엇입니까? – perreal

+0

새 프록시 주소가있는 모든 요청이 필요하기 때문에 – user873286

답변

3

당신은 URL을 포함하는 새로운 파일을 가정, wget을 호출을 포함하는 스크립트를 변경할 수 있습니다

#!/bin/bash 

URLS="_url_list.txt" 
FILE="_reliable_list.txt" 

i=1 
for line in $(cat $FILE) 
do 
    export http_proxy="http://$line" 
    wget $(head $i $URLS | tail -1 | tr -d '\n') 
    let i++ 
done 
+0

다음과 같은 오류가 발생합니다 : 잘못된 포트 번호 .y URL http://217.196.113.81:8080 – user873286

+0

@ user873286, 여기에서 작동합니다. 오류 메시지에 "URL"이 표시됩니까? 이걸 실행하려고 할 수 있습니까? "export http_proxy = 217.196.113.81 : 8080; wget google.com" – perreal

+0

예, 단일 변수는 작동하지만 파일을 읽을 때 포트가 잘못되었다고 생각합니다. 마지막 문자 때문이라고 생각합니다. 캐리지 또는 개행 문자를 제거하는 방법을 알고 있습니까? – user873286

2

우선, 파일을 실행하는 대신 source을 원합니다. export을 사용하면 호출 셀로 전파되지 않습니다.

둘째, 코드가 좋지 않습니다. cat 대신 bash의 파일 읽기 기능을 사용해야합니다. 또한, 당신의 코드는 단지 그 파일의 마지막 라인을 선택하고 그것을 프록시로 사용합니다, 당신이하고 싶은 것이 확실합니까? 그렇다면 tail 만 사용할 수 있습니다.

+0

원하는 작업을 수행하지 않고 모든 행을 가져 와서 프록시 주소로 사용하고 wget을 호출 한 다음 파일 끝까지이 프로세스를 계속합니다 – user873286

+0

@ user873286 : 그렇다면 그런 식으로하면 루프 안에'wget -c'를 호출해야합니다. – cha0site

+0

예 알아요,하지만 작동 여부에 관계없이 첵크하기 전에 wget -c이면 충분합니까? – user873286

0

당신은 단순히 명령 줄에서이 작업을 수행 할 수 있습니다 또는 다른

export http_proxy="$(tail -1 _reliable_list.txt)" 

을 당신이 스크립트에 선 위에있는 script.sh 다음과 같이에서 실행 말한다면 :

. ./script.sh 

보낸 얻을 현재 쉘의 변수.

2

대신 고양이 FILE의 난 항상 "읽는 동안"를 사용합니다.

여기에 차이가 있는지, 다른 하나를 사용해야 할 이유가 있는지 알 수 없습니다.

예 :

while read LINE 
do 

    export http_proxy="http://${LINE}" 

done < $INPUT_FILE 
+0

좋은 접두사의 경우에는 질문의 접선 유형이 되겠지만 +1은 좋은 조언입니다. 입력 파일에 공백 문자 (개행 문자 제외)가 있으면 차이가납니다. for-loops는 단어 분리가 가능합니다. '읽기'는 그렇지 않습니다. –

+0

다음과 같이 작성할 경우 (경우에도 마찬가지 임) : export http_proxy : "http : // $ LINE"; wget $ URL. 오류 :: 포트 번호가 잘못되었습니다 .y URL http://217.196.113.81:8080 – user873286

+0

죄송합니다. 변수를 따옴표로 묶어야 할 수도 있습니다. 위의 예제를 수정했습니다. 사실, perreal은 이전 예제에서 그렇게했습니다. – mmrtnt