什么区别-v卷曲中的详细信息?

时间:2018-04-21 17:39:53

标签: linux bash unix curl

我制作了这个实用程序(实用程序代码的一部分)

#!/bin/bash
url_prefix='https://www.javatpoint.com/'
url_suffix='java-tutorial'

  curl -v $url_prefix$url_suffix | grep -m 1 '>next' | cut -d '"' -f 4 >temp.html

如果我从curl commnad中删除-v;它开始说没有写入body。我无法理解为什么会这样。 完整代码可在https://github.com/RishiPrakash/JavatpointAsPdf

获取

2 个答案:

答案 0 :(得分:1)

curl -v不会导致或抑制您的错误,但错误可能会在其他日志消息-v写入时丢失。

curl -v 确定是否将详细日志记录写入stderr;它不会以任何其他方式影响您的管道。

该错误实际上是由curl | grep -m 1

引起的

要解释错误,请:

grep -m 1告诉grep在第一场比赛后退出。

这意味着由curl读取的所有后续写入由grep读取的FIFO将导致EPIPE错误,因为管道另一端的程序不再读取。因此,curl无法写入正文的其余部分,因此您会收到相关错误。

然而,因为您的管道的其余部分实际上并未使用任何该主体内容,因此这是预期且无害的。

如果你想抑制这个错误,即使curl不需要它也让grep写出整个输出,你可以很容易地做到这一点:

content=$(curl -v "$url_prefix$url_suffix")
printf '%s\n' "$content" | grep -m 1 '>next' | ...

命令替换读取curl整个输出,因此不会发生错误。

答案 1 :(得分:0)

根据curl https://curl.haxx.se/docs/manpage.html的手册页,通过使用详细信息,您可以看到有关curl操作的更多调试信息 它在您的情况下失败了,因为您正在对更多信息进行进一步操作,如果您使用详细模式(-v)注意,则不会出现此信息