2017-03-09 94 views
0

我需要檢查一些鏈接的狀態聽在一個名爲paths.txt文件,我有寫一個簡單的for循環,但不能工作BASH - curl命令不與

for LINK in $(cat paths.txt) 
do 
    CURL="$(curl -I $LINK 2>/dev/null | head -n 1 | cut -d$' ' -f2)" 
    if [ "${CURL}" = "200" ] 
    then 
    echo ${LINK} >> true.txt 
    else 
    echo ${LINK} >> false.txt 
    fi 
done 

如果我啓動curl命令工作納入循環從終端我讀取正確的狀態,而不是如果我作出迴應CURL變量我沒有任何輸出

+0

代替'CURL =「$(捲曲-I $ LINK 2>的/ dev/null的|頭-n 1 |切-d $」'-f2)」','做回聲$ LINK'。你有沒有得到你的文件的正確內容? – Aserre

+0

是的,我已經嘗試和工作,我已經插入'echo -e「\ n $ LINK \ n」'並正確顯示所有鏈接由 – hellb0y77

+0

sepatared是否有任何空格或特殊字符(如'*'或'?' )在網址中? –

回答

1

運行這樣的腳本:bash -x myscript並觀察執行的命令。

+0

我在任何鏈接的末尾都找到了一個'\ r',我有正確的文件格式,現在完美工作,謝謝! – hellb0y77

+1

這不是一個真正的答案。這是一個可以指導答案的一般性評論。 – chepner

0

在bash腳本中不使用cat,因爲這是不好的做法,可能會導致大文件出現問題。

SCRIPTDIR=`dirname -- "$0"` 
for siteUrl in $(< "$SCRIPTDIR/paths.txt") 
do 
    if [[ -z "$siteUrl" ]]; then break; fi 
    if [[ "$(curl --write-out "%{http_code}\n" --silent --output /dev/null ${siteUrl})" = "200" ]]; then 
     echo ${siteUrl} >> true.txt 
    else 
     echo ${siteUrl} >> false.txt 
    fi 
done