Wget 是静默的,但它会显示错误消息

phi*_*hag 12 wget

我想用Wget下载一个文件,但按照通常的 UNIX 哲学,如果下载成功,我不希望它输出任何内容。但是,如果下载失败,我想要一条错误消息。

-q选项禁止所有输出,包括错误消息。如果我-nv改为包含选项,Wget 仍会打印(在 stderr 上):

2012-05-03 16:17:05 URL:http://example.net/ [2966] -> "index.html" [1]
Run Code Online (Sandbox Code Playgroud)

我怎样才能删除该输出,但仍然收到错误消息?

use*_*686 7

试试吧curl

curl -fsS $url -o $file
Run Code Online (Sandbox Code Playgroud)

长版:

curl --fail --silent --show-error $url --output $file
Run Code Online (Sandbox Code Playgroud)

GNOME 用户可以尝试 Gvfs:

gvfs-cp $url $file
Run Code Online (Sandbox Code Playgroud)


Foo*_*oon 3

如果你不能得到更好的答案,那么蹩脚的黑客:

wget {url} 2>/tmp/err.log || cat /tmp/err.log; rm /tmp/err.log
Run Code Online (Sandbox Code Playgroud)

(2> /tmp/err.log 将 stderr 重定向到 tmp 文件;如果 wget 返回 0 [成功],则 || 短路,否则它将打印出错误日志值)

  • 这可行,但它是“蹩脚”的。`error_log=$(wget -nv example.net 2>&1) || echo $error_log` 是一个更优雅的解决方案,但仍然很笨拙。 (5认同)