如何将一个shell命令的大型二进制输出作为下一个的参数传播?

时间:2019-04-11 12:07:43

标签: bash macos shell unix

在macOS上,我想通过管道传递一个命令的输出,并将其作为参数传递给另一个。问题在于传递的数据是二进制的,如果我使用xargs,它将以以下错误分割字节流:

xargs: unterminated quote

使用xargs的原因是对非常大的字节流进行分块,因此避免:

Argument list too long

xargs并不是适合该工作的工具(请参阅下面的评论)。

因此,我如何实现以下类似 的东西?

./v.sh | xargs command --argument $0

我尝试更改ulimit等。

用例是提交一个二进制文件作为Kubernetes机密。

谢谢!

1 个答案:

答案 0 :(得分:3)

正如亚伦(Aaron)建议的那样,您应该避免在命令行上传递长参数,而要依靠从文件中读取它们,因此开始使用kubectl create secret generic test --from-file=<(./v.sh) 参数。

要即时计算命令并将其提供给您的命令,可以使用流程替换:

<()...

kubectl语法被./v.sh进程可以打开的文件描述符替代,并且将动态计算{{1}}的内容。就像命名管道(这可能是解决您问题的另一种方法)。