参数列表太长 - 在容器中回显

参数列表太长 - 在容器中回显

容器正在运行一个 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 重定向”步骤?

相关内容