2014-02-24 63 views
0

試圖重定向和相當的輸出到cURL命令上的屏幕?如果cURL無法在網站上找到該文件,也會發生異常情況?它通過FTP URL下載到FTP站點。我有很多文件,所以它在一個循環中迭代,我不希望它停止,如果沒有找到文件,所以如果沒有發現異常將繼續下去?如果我嚴格使用bash腳本,我可以使用cURL命令嗎?它沒有下載文件,但輸出到很多東西,也沒有能夠測試的情況下,它會拋出一個錯誤,所以不知道它會繼續。bash停止cURL輸出到屏幕

如何停止從輸出到屏幕的cURL?這是我迄今爲止所擁有的。

echo $DLADDR 
curl -o Downloads/$FILECATNAME $DLADDR 2>&1 | tee $LOGFILE 

我想停止這個輸出並把每個輸出放到一個LOG文件中。

例捲曲輸出:

% Total % Received % Xferd Average Speed Time  Time  Time  Current 
           Dload Upload Total Spent Left  Speed 
100 574k 100 574k 0  0 622k  0 --:--:-- --:--:-- --:--:-- 632k 
+1

考慮改寫你的問題。因爲它並沒有說明你想問什麼。 – devnull

回答

0

如上評論中提及,這是很難準確地計算你的要求。然而,其中一個問題是:

如何停止CURL從輸出到屏幕?

你是在說:

curl -o Downloads/$FILECATNAME $DLADDR 2>&1 | tee $LOGFILE 

這將重定向響應輸出到指定的文件但curlSTDERR將與STDOUT合併和tee d到日誌文件。

從輸出到屏幕輸出重定向馬上停止捲曲,即說:

curl -o Downloads/$FILECATNAME $DLADDR > $LOGFILE 2>&1 

另一個問題似乎是:

我不想如果沒有找到文件,它會停止,如果 未找到異常,那麼它會繼續?

如果除非您指定要做到這一點,即除非你說curl遇到錯誤的腳本不應該停止:

set -e 
在腳本

+0

我更新了我的答案。所以你的第二個「curl -o Downloads/$ FILECATNAME $ DLADDR> $ LOGFILE 2>&1」在輸出到屏幕時會停止,但它不會將每個輸出都放到日誌文件中。它只是做了第一個。是的,我沒有設置-e,所以它應該抓住它。我實際上在我的一個URL中犯了錯誤,所以我證明它會繼續。我想知道哪一個?!我試圖找出如何做到這一點。感謝您的幫助到目前爲止! – MAXGEN

+0

@MAXGEN爲了_append_到文件,您需要使用'>>'而不是'>'。 – devnull

+0

是的,工作。你這個人!謝謝。 – MAXGEN

-2
curl -o Downloads/$DESCFILE $TEXT1 > $TEXT 2>&1 
+1

考慮在答案中加入更多的細節。 –

0

您可能需要調查捲曲的-w--write-out)選項,以獲得精確需要的日誌信息,避免不必要的/未報告位。

#!/usr/bin/env bash 

DLADDR=ftp://example.com/somefile 
LOGFILE=/path/to/downloader.log 

declare -a bashopts=() 

bashopts+=(-s) 
bashopts+=("-o 'Downloads/$FILECATNAME'") 
bashopts+=("-w '%{size_download} %{speed_download} %{time_total} %{filename_effective}'") 

curl "${bashopts[@]}" "$DLADDR" > "$LOGFILE" 

我們通過將選項管理放入數組來簡化選項管理。請注意以下選項:

  • -s使進度計靜音。
  • -o根據您的示例設置輸出文件。
  • -w根據curl手冊頁中列出的格式寫入輸出。

由於您使用指導的-o輸出文件,唯一的信息捲曲發送到標準輸出是由-w命令生成的日誌數據。

請注意,在bash中引用變量的經驗法則是,如果您使用的是變量......則應該引用它。