【问题标题】:Why does wget still print to stderr when there are no error and using -nv?当没有错误并使用-nv时,为什么wget仍然打印到stderr?
【发布时间】:2014-10-29 01:45:09
【问题描述】:

下面的命令行交互说明了一个问题:

$ wget www.google.com -nv >> out.log
2014-10-28 21:41:43 URL:http://www.google.com/ [17700] -> "index.html.1" [1]

所以 wget www.google.com,并使用 -nv(非详细,但仍打印错误信息),我将所有输出重定向到 out.log,因此不应在 stdout 上打印任何内容,但信息仍会打印到终端,我只能假设它来自标准错误。有谁知道为什么 wget 这样做?当出现实际错误时,我将如何关闭它并仍然保留错误日志记录?

非常感谢!

杰森

【问题讨论】:

    标签: wget


    【解决方案1】:

    就像the manual 所说,您正在寻找的选项是-q。 “非详细”只是关闭详细状态报告。

    wget 中有些奇怪的设计决策是偏爱curl 的原因之一。

    【讨论】:

    • OP 想要在出错时显示错误消息,但 wget -q http://www.stackoverflow.invalid 不打印任何内容。
    【解决方案2】:

    改用 cURL:

    $ curl -Ss http://www.stackoverflow.com -o /dev/null
    (no output)
    
    $ curl -Ss http://www.stackoverflow.invalid -o /dev/null
    curl: (6) Couldn't resolve host 'www.stackoverflow.invalid'
    

    如果您出于某种原因确实需要使用 wget,您可以捕获输出并仅在失败时显示:

    errors=$(2>&1 wget -nv http://www.stackoverflow.com) || echo "$errors" >&2
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-06-08
      • 2020-09-15
      • 2016-03-13
      • 2021-05-12
      • 2010-09-16
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多