我制作了这个实用程序(实用程序代码的一部分)
#!/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;它开始说无法写入正文。我无法理解为什么会发生这种情况。 完整代码可在https://github.com/RishiPrakash/JavatpointAsPdf获取
最佳答案
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
的整个输出,因此不会发生错误。
关于linux - curl 中的 -v verbose 有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49958487/