[英]bash stop cURL outputting to screen
嘗試重定向並在cURL命令上將輸出完全顯示到屏幕上? 如果cURL在網站上找不到文件,還會發生異常情況嗎? 使用FTP URL將其下載到FTP站點。 我有很多文件,因此它在一個循環中進行迭代,並且我不希望它在沒有找到文件的情況下停止,因此如果沒有找到異常,它將繼續嗎? 如果我嚴格使用bash腳本,可以使用cURL命令嗎? 它確實下載了文件,但輸出了很多東西,並且還無法在可能引發錯誤的情況下進行測試,因此不確定是否會繼續執行。
如何阻止cURL輸出到屏幕? 到目前為止,這就是我所擁有的。
echo $DLADDR
curl -o Downloads/$FILECATNAME $DLADDR 2>&1 | tee $LOGFILE
我想停止此輸出並將每個輸出放入LOG文件。
cURL輸出示例:
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 574k 100 574k 0 0 622k 0 --:--:-- --:--:-- --:--:-- 632k
正如上面的評論中提到的那樣,很難准確地確定您的要求。 但是,問題之一是:
如何停止CURL從輸出到屏幕?
你是說:
curl -o Downloads/$FILECATNAME $DLADDR 2>&1 | tee $LOGFILE
這會將響應輸出重定向到指定的文件,但是curl
的STDERR
將與STDOUT
合並,並tee
d合並到日志文件。
立即重定向輸出以阻止CURL輸出到屏幕 ,即:
curl -o Downloads/$FILECATNAME $DLADDR > $LOGFILE 2>&1
另一個問題似乎是:
我不希望它在沒有找到文件的情況下停止,因此如果沒有發現異常會繼續嗎?
如果curl
遇到錯誤,則腳本不應停止,除非您已指定這樣做,即除非您已說過:
set -e
在您的腳本中。
您可能需要研究curl的-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
定向輸出文件,因此curl發送給stdout的唯一信息將是-w
命令生成的日志數據。
請注意,在bash中引用變量的經驗法則是,如果您使用的是變量,則應將其引起來。
curl -o Downloads/$DESCFILE $TEXT1 > $TEXT 2>&1
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.