我正在运行一个命令:
cat urls.txt | xargs -L 1 -P 5 timeout 40 wget
这将下载 urls.txt 中的所有 URL
以前这个方法很好用,但最近我将下载的 URL 从 domain.com/54f-5g4/ 改为 domain.com/this-that/
出于某种原因,我现在得到:
cat: write error: Broken pipe
我查看了正在执行的命令并且它们看起来都很好,即没有未转义的字符。
有人知道问题可能是什么吗?或者如何获取更多调试信息?我相信问题出在管道后的命令上。
更新:我发现了错误。看来我无意中在 urls.txt 文件中输入了一个 '。如果您收到此错误,则说明管道后的命令存在问题。
答案1
在 shell 中使用管道时:
command_1 | command_2
command_1 的输出通过管道传输到 command_2 作为输入。如果 command_2 在读取 command_1 的所有输出之前结束(例如,在您的例子中,因为它发现了错误,正如您在更新中所说的那样,您不小心输入了'
),则 command_1 可能会抱怨其输出管道过早关闭。