bash - 如何将一个 shell 命令的大二进制输出作为参数传播到下一个?
问题描述
在 macOS 上,我想通过管道输出一个命令并将其作为参数传递给另一个命令。问题是传递的数据是二进制的,如果我使用 xargs 它会拆分字节流并出现以下错误:
xargs: unterminated quote
使用 xargs 的原因是对非常大的字节流进行分块,从而避免:
Argument list too long
xargs 不是适合这项工作的工具(请参阅下面的评论)。
因此,我怎样才能实现以下目标?
./v.sh | xargs command --argument $0
我试过改变 ulimit 等。
用例是将二进制文件作为 Kubernetes 机密提交。
谢谢!
解决方案
正如 Aaron 建议的那样,您应该避免在命令行上传递长参数并依赖于从文件中读取它们,因此开始使用--from-file
参数。
要即时计算命令并将其提供给您的命令,您可以使用进程替换:
kubectl create secret generic test --from-file=<(./v.sh)
语法被进程可以打开的<()...
文件描述符替换,kubectl
并且将./v.sh
动态计算的内容。它就像一个命名管道(这可能是您问题的另一种解决方案)。
推荐阅读
- python - RuntimeWarning:从未等待协程。如何异步/等待回调
- hyperledger-fabric - fabric-ca-server 隶属关系命令行选项
- c# - 将自定义控件序列化为 JSON 文件
- php - 如果帖子数据不符合参数,如何排除某些帖子显示在 wp_query 中?
- c# - 通过 SDK 调用方法调用方法不会返回预期的输出
- nativescript - 在 iOS 上测试 nativescript 构建
- automated-tests - jldoctest 包含在文档中的 julia 文档字符串中的块,但未在其上运行测试
- excel - 每周生成的报告中的 VBA 复制粘贴
- javascript - Finding value inside of a data attribute
- flow-project - 增加网格场景的车道