bash停止cURL输出到屏幕

时间:2014-02-24 04:41:34

标签: bash redirect curl

尝试将输出重定向到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

3 个答案:

答案 0 :(得分:0)

正如上面的评论中提到的,很难准确地确定你在问什么。但是,其中一个问题是:

  

如何阻止CURL输出到屏幕?

你在说:

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

会将响应输出重定向到指定文件,但STDERR的{​​{1}}将与curlSTDOUT d合并到日志文件中。

立即将输出重定向到停止CURL从输出到屏幕,即说:

tee

另一个问题似乎是:

  

我不希望它停止,如果找不到文件,所以如果继续,将继续   没有找到例外?

如果curl -o Downloads/$FILECATNAME $DLADDR > $LOGFILE 2>&1 遇到错误,脚本不应该停止,除非您已指定这样做,即除非您说过:

curl

在你的剧本中。

答案 1 :(得分:0)

您可能需要调查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命令生成的日志数据。 / p>

请注意,在bash中引用变量的经验法则是,如果你使用变量......应该引用它。

答案 2 :(得分:-2)

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