【问题标题】:Why does curl send report on speed and time as error output为什么 curl 将速度和时间报告作为错误输出发送
【发布时间】:2017-08-13 18:51:20
【问题描述】:

我在脚本中使用以下命令:

curl -O --time-cond $_input_file_name $_location/$_input_file_name

它会生成一个带有以下标题的报告:

% Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                               Dload  Upload   Total   Spent    Left  Speed

但它似乎被发送到错误输出,即使传输已成功并且 curl 的返回码为零。为什么这样做?有没有办法在不抑制实际错误消息的情况下抑制这种情况?在 curl 命令中添加 -s 或 -sS 似乎不会改变这种行为。

在终端中运行命令,-s 选项会抑制输出。问题仅出现在脚本中。该脚本正在通过 crontab 在 crontab 中触发。

我正在使用 curl 7.52.1 (x86_64-pc-linux-gnu) 在 Debian 9.1 中工作。

【问题讨论】:

标签: shell curl


【解决方案1】:

Curl 至少在最初被设计为默认将其输出发送到stdout(请参阅here),许多其他 Unix 实用程序也这样做。

某些程序允许您通过将- 指定为输出文件名来将其输出写入stdout,但这不是curl 的方式。

因此需要将所有进度消息发送到stderr 的原因是它们不会破坏您在stdout 上输出的实际数据流。

如果您检查man page,您应该会看到--silent --show-error 选项应该禁用进度内容,同时仍然显示错误。

【讨论】:

    【解决方案2】:

    使用“-s -S”

       -S, --show-error
              When used with -s, --silent, it makes curl show an error message if it fails.
    
       -s, --silent
              Silent  or quiet mode. Don't show progress meter or error messages.  Makes Curl mute. It will still out-
              put the data you ask for, potentially even to the terminal/stdout unless you redirect it.
    
              Use -S, --show-error in addition to this option to disable progress meter but still show error messages.
    
              See also -v, --verbose and --stderr.
    

    【讨论】:

    • 谢谢,但似乎不适用于脚本。我已经澄清了这个问题。为什么它被发送到错误输出?我想要错误消息,而不是进度报告。
    • AFAIK 这就是答案。我建议尝试证明您实际上正在更改 crontab
    • 谢谢,你说得对,这对我很有帮助!改变的不是 crontab,而是脚本中的脚本中的脚本。不幸的是,我没有注意到 curl 有两种用途。但我确实觉得 paxdiablo 的回答有助于我更多地了解发生了什么。
    猜你喜欢
    • 1970-01-01
    • 2010-11-03
    • 2015-04-20
    • 1970-01-01
    • 2020-11-04
    • 2014-06-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多