2010-08-30 45 views
1

我正在嘗試創建一個腳本,它將運行wget到幾個站點,並檢查我們是否從站點收到200 OK。隱藏bash輸出中的變量應用程序結果

我的問題是wget應用程序的結果顯示在stdout中。有什麼方法可以隱藏這個嗎?

我現在的腳本是:

RESULT=`wget -O wget.tmp http://mysite.com 2>&1` 

後來,我將使用正則表達式來查找200 OK,我們從wget的產生ERROUT接收。 當我運行腳本時,它可以正常工作,但是我得到了在我的回聲之間添加的wget的結果。

任何方法?

+0

你的命令工作正常,我。 – 2010-08-30 17:17:26

回答

1

您可以使用:

RESULT=`wget --spider http://mysite.com 2>&1` 

而且這樣做的伎倆:

RESULT=`wget -O wget.tmp http://mysite.com >/dev/null 2>&1` 

玩過周圍一點點,並與一個想出了:

RESULT=`curl -fSw "%{http_code}" http://example.com/ -o a.tmp 2>/dev/null` 

這什麼也不輸出但是「200」 - 沒有別的。

+1

傑克,我沒有看到反引號或'$(...)'? – 2010-08-30 17:30:15

+0

我只是嘗試了兩種,但我仍然得到stderr輸出到我的屏幕。我開始認爲這可能是wget,因爲它看起來只是在你自己運行時向你顯示stderr ... – Gerald 2010-08-30 17:52:10

+0

剛更新了帖子。 – JackFuchs 2010-08-30 18:32:15

0

傑克的suggestions都不錯。我會稍微修改它們。

如果您只需檢查狀態碼,請使用Jack參考的--spider選項。從文檔:

當使用此選項調用時,Wget將表現爲Web蜘蛛,這意味着它不會下載頁面,只是檢查它們在那裏。

和傑克的第二個建議,顯示躲在後面輸出的核心思想:

... >/dev/null 2>&1 

上述標準輸出重定向到/dev/null2>&1然後將標準錯誤重定向到當前標準輸出文件描述符,該標準輸出文件描述符已被重定向到/dev/null,所以它不會給你任何輸出。

但是,由於您不想輸出,因此您可能可以使用--quiet選項。從文檔:

關閉Wget的輸出。

所以,我可能會使用以下命令

wget --quiet --spider 'http://mysite.com/your/page' 
if [[ $? != 0 ]] ; then 
    # error retrieving page, do something useful 
fi 
0
TCP_HOST="mydomain.com" 
TCP_PORT=80 
exec 5<>/dev/tcp/"${TCP_HOST}"/"${TCP_PORT}" 
echo -e "HEAD/HTTP/1.0\nHOST:${TCP_HOST}\n" >&5 
while read -r line 
do 
    case "$line" in 
     *200*OK*) 
      echo "site OK:$TCP_HOST" 
      exec >&5- 
      exit 
      ;; 
     *) echo "site:$TCP_HOST not ok" 
      ;; 
    esac 
done <&5