2012-02-28 91 views
2

在linux中,我們可以通過export http_proxy=http://x.x.x.x:x更改終端中http_proxy的變量。但我想用腳本來做。所以我有以下代碼:Linux Bash腳本代理變量

#!/bin/bash 

FILE="_reliable_list.txt" 

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

當我檢查變量http_proxy的值時,在同一終端上,它是空的。 我想從文件代理地址讀取,並將它們導出到http_proxy變量,並在使用wget後。只是我想自動執行此代碼:

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

如果有任何其他想法,我將非常高興。

+0

你爲什麼要設定在一個循環的代理?輸入文件的最後一行是什麼? – perreal 2012-02-28 14:15:26

+0

因爲我需要用新代理地址的每個請求 – user873286 2012-02-28 14:57:20

回答

3

您可以更改腳本嵌入wget的通話,假設包含URL的新文件:

#!/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 2012-02-28 15:40:04

+0

@ user873286,它在這裏工作,「URL」顯示在您的錯誤信息?你可以嘗試運行這個:「export http_proxy = 217.196.113.81:8080; wget google.com」 – perreal 2012-02-28 16:30:32

+0

是的單個變量是有效的,但是當我從文件讀取時,它說的是錯誤的端口,我認爲這是因爲最後一個字符馬車或換行符,你知道如何去除它們嗎? – user873286 2012-02-28 17:26:07

2

首先,你想source該文件而不是運行它。當您使用export時,它不會傳播到調用shell。

二,你的代碼不太好。您應該使用bash的文件讀取功能而不是cat。此外,您的代碼只是選擇該文件中的最後一行並將其用作代理,您確定這是您想要執行的操作嗎?如果是這樣,你可以使用tail

+0

沒有我想要做的,要獲得每一行並將其用作代理地址,然後調用wget,然後繼續此過程,直到文件 – user873286 2012-02-28 14:50:08

+0

@ user873286結束:然後,您不能這樣做,你必須把調用放在循環內部的'wget -c'。 – cha0site 2012-02-28 15:00:40

+0

是的,我知道,但在我想要確定它是否有效之前,wget -c就足夠了嗎? – user873286 2012-02-28 15:03:32

0

你可以簡單地做這個命令行:

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

否則,如果你有上面的腳本行且說script.sh像這樣運行:

. ./script.sh 

獲得出口當前shell中的變量。

2

代替cat FILE的我總是用「而讀」。

我不知道這是否有所作爲,或者如果有理由使用其中一個。

例子:

while read LINE 
do 

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

done < $INPUT_FILE 
+0

類似問題的切線,但對於良好的建議+1。如果輸入文件中有空白(除了換行符),它會有所不同:for循環受到分詞的影響; 'read'不是。 – 2012-02-28 15:37:30

+0

當寫這樣的(甚至爲例):export http_proxy:「http:// $ LINE」; wget $ URL。我收到錯誤:: Bad port number.y URL http://217.196.113.81:8080 – user873286 2012-02-28 15:38:19

+0

Oops.Sorry。您可能需要將變量包含在引號中。我修改了上面的例子。實際上,在前面的例子中,perreal就是這樣做的 – mmrtnt 2012-02-29 15:50:33