如何使用 `xargs` 忽略标准输入?

How do I ignore stdin with `xargs`?

我正在使用 xargs + seq 到 运行 并行命令数千次。

例如运行使用 20 个并行进程宁 curl 10,000 次:

seq 1 10000 | xargs -n1 -P20 curl "https://www.example.com/foo"

但是 xargsstdin 的输出附加到它 运行 的命令中(这是默认设计的)。所以它最终有效地 运行ning:

curl "https://www.example.com/foo" 1
curl "https://www.example.com/foo" 2
curl "https://www.example.com/foo" 3
curl "https://www.example.com/foo" 4
...

这导致我的 curl 命令出错。

如何让xargs“忽略”这里的stdin值而只输出null/empty值?

我尝试了一个 for 循环,但这并没有 运行 并行语句,这是我需要的。

我还尝试将 seq 格式化为空字符串 (seq -f'' 1 10000),它可以正确输出 10,000 个空白行,但是 xargs 会忽略此空白输入并且从不 运行s任何命令。

谢谢!

您最好 运行 以下内容。这只会将网址重定向回 xargs 1000 次。

for i in $(seq 1000)
  do echo "https://www.example.com/foo" | xargs -n1 -P20 curl
done

或作为 one-liner:

for i in $(seq 1000);do echo "https://www.example.com/foo" | xargs -n1 -P20 curl;done

使用 xargs -I {} 您可以将标准输入与另一个 {} 放在您想要的位置。如果您没有将它放在命令中,标准输入将被忽略。