簡體   English   中英

bash停止cURL輸出到屏幕

[英]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

這會將響應輸出重定向到指定的文件,但是curlSTDERR將與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.

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