我制作了这个实用程序(实用程序代码的一部分)
#!/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
获取答案 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)注意,则不会出现此信息