首页 > 解决方案 > 如何将一个 shell 命令的大二进制输出作为参数传播到下一个?

问题描述

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

xargs: unterminated quote

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

Argument list too long

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

因此,我怎样才能实现以下目标?

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

我试过改变 ulimit 等。

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

谢谢!

标签: bashmacosshellunix

解决方案


正如 Aaron 建议的那样,您应该避免在命令行上传递长参数并依赖于从文件中读取它们,因此开始使用--from-file参数。

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

kubectl create secret generic test --from-file=<(./v.sh)

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


推荐阅读