如何在 bash 中创建无限的字符串管道

如何在 bash 中创建无限的字符串管道

文件 links.txt 中有大约 10 个链接。我通过下载它们

cat links.txt | xargs -i --max-procs=4 bash -c "wget {}"

我想重复这样做

while :
do
   cat links.txt | xargs -i --max-procs=4 bash -c "wget {}"
done

在 while 循环的下一次迭代之前,它会等待所有子进程完成。但当有可用线程时,我想继续下载(从文件开头获取 url)。怎么做?也许我可以制作无限的弦管?

答案1

如果您yes接受字符串参数:

yes links.txt | xargs cat | xargs -n1 --max-procs=4 wget

cat运行一个perllinks.txt或每个链接运行一个perl 是没有意义的bash(除非您希望将 的 行links.txt解释为 shell 代码,如http://$host$pathhttp://evil;rm -rf /)。

如果文件足够小,您还可以执行以下操作:

yes -- "$(cat links.txt)" | xargs -n1 -P4 wget

相关内容