簡體   English   中英

檢查 wget 的返回值

[英]Check wget's return value

我正在編寫一個腳本來下載一堆文件,我希望它在某個特定文件不存在時發出通知。

r=`wget -q www.someurl.com`
if [ $r -ne 0 ]
  then echo "Not there"
  else echo "OK"
fi

但它在執行時出現以下錯誤:

./file: line 2: [: -ne: unary operator expected

怎么了?

其他人已正確發布您可以使用$? 獲取最新的退出代碼:

wget_output=$(wget -q "$URL")
if [ $? -ne 0 ]; then
    ...

這使您可以捕獲標准輸出和退出代碼。 如果您實際上並不關心它打印的內容,則可以直接對其進行測試:

if wget -q "$URL"; then
    ...

如果你想抑制輸出:

if wget -q "$URL" > /dev/null; then
    ...

$r是 wget 的文本輸出(您用反引號捕獲了它)。 要訪問返回代碼,請使用$? 多變的。

$r為空,因此您的條件變為if [ -ne 0 ]並且似乎-ne用作一元運算符。 試試這個:

wget -q www.someurl.com
if [ $? -ne 0 ]
  ...

編輯正如安德魯在我之前解釋的那樣,反引號返回標准輸出,而$? 返回上次操作的退出代碼。

你可以

wget ruffingthewitness.com && echo "WE GOT IT" || echo "Failure"

-(~)----------------------------------------------------------(07:30 Tue Apr 27)
risk@DockMaster [2024] --> wget ruffingthewitness.com && echo "WE GOT IT" || echo "Failure" 
--2010-04-27 07:30:56--  http://ruffingthewitness.com/
Resolving ruffingthewitness.com... 69.56.251.239
Connecting to ruffingthewitness.com|69.56.251.239|:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: unspecified [text/html]
Saving to: `index.html.1'

    [ <=>                                                                                    ] 14,252      72.7K/s   in 0.2s    

2010-04-27 07:30:58 (72.7 KB/s) - `index.html.1' saved [14252]

WE GOT IT
-(~)-----------------------------------------------------------------------------------------------------------(07:30 Tue Apr 27)
risk@DockMaster [2025] --> wget ruffingthewitness.biz && echo "WE GOT IT" || echo "Failure"
--2010-04-27 07:31:05--  http://ruffingthewitness.biz/
Resolving ruffingthewitness.biz... failed: Name or service not known.
wget: unable to resolve host address `ruffingthewitness.biz'
zsh: exit 1     wget ruffingthewitness.biz
Failure
-(~)-----------------------------------------------------------------------------------------------------------(07:31 Tue Apr 27)
risk@DockMaster [2026] --> 

從 wget 捕獲結果並檢查呼叫狀態的最佳方法

wget -O filename URL
if [[ $? -ne 0 ]]; then
    echo "wget failed"
    exit 1; 
fi

通過這種方式,您可以檢查 wget 的狀態以及存儲輸出數據。

  1. 如果調用成功,則使用存儲的輸出

  2. 否則它將退出並顯示錯誤 wget failed

我一直在嘗試所有的解決方案,但沒有運氣。

wget 以非交互方式執行。 這意味着 wget 在后台工作,您無法使用 $? 捕獲返回碼。

一種解決方案是處理“--server-response”屬性,搜索 http 200 狀態代碼示例:

wget --server-response -q -o wgetOut http://www.someurl.com
sleep 5
_wgetHttpCode=`cat wgetOut | gawk '/HTTP/{ print $2 }'`
if [ "$_wgetHttpCode" != "200" ]; then
    echo "[Error] `cat wgetOut`"
fi

注意:wget 需要一些時間來完成他的工作,因此我設置了“sleep 5”。 這不是最好的方法,但可以很好地測試解決方案。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM