容器正在运行一个 Ruby 应用程序,它将生成一个巨大的字符串(不确定有多大),我将其存储在变量 (index_render) 中并将其附加到文件中。
system("echo '#{index_render}' > temp/temp.html")
但我越来越Errno::E2BIG: [!] Argument list too long - echo
我使用的容器 alpine/bundle:2.7.2 将运行 ruby 应用程序,并且在应用程序内部,ruby 将调用节点应用程序。因此,我从 alpine/bundle:2.7.2 映像安装 nvm、node 等作为初始化脚本(如配置脚本)。
有什么方法可以使用 init 脚本增加大小吗?因为我无权修改 Ruby 应用程序。
答案1
这是因为system()
在许多语言中,默认情况下通过实际的 shell 进行调用/bin/sh
。
可能存在几个问题:
- 变量中的文本
'
多次包含字符,这会破坏'
将变量包装成许多小位,直到参数数量耗尽 - 从变量扩展的文本太大,无法解析由 调用的 shell
system()
,因此 shell 因此错误而终止 - 从变量扩展的文本确实太大,无法放入
argv
内核缓冲区
为什么不修复应用程序以默认直接写入目标文件,而不需要中间的“echo +变量+ shell 重定向”步骤?