linux - curl 中的 -v verbose 有什么区别?

标签 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;它开始说无法写入正文。我无法理解为什么会发生这种情况。 完整代码可在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/

相关文章:

wordpress - 上传的文件无法移动到 wp-content/uploads

Linux 某类文件修改后如何执行命令?

linux - 操作系统如何知道映射内存中的页面是脏的?

bash - 从 CMake 文件执行 bash 命令

linux - 在 grep 搜索后添加 echo

c++ - 您使用什么调试器工具来查看 STL 容器的内容(在 Linux 上)

linux - 如何将存在于多个子文件夹中的多个目录中的文件复制到两层以上?

php - 使用特定版本的 PHP 进行 xDebug

linux - 如何将变量赋值的耗时存储到bash脚本中的另一个变量?

linux - 使用 Gzip 单独压缩多个文件