用完ksh和bash中的环境空间后,如何查看剩余量

虽然可以争论的是我应该为我的DSL使用其他类型的库系统,但事实仍然是它可以在具有bash的Linux上运行,但在ksh和bash的OpenBSD上都无法运行。

我有一个Shell脚本,可以从其他Shell文件中加载环境变量(通过源代码)。一旦获取了所有文件,我便运行一个独立的应用程序,该应用程序使用环境来生成报告。

我很确定我已经用完了变量的可用内存...但是如何确定剩余的数量呢?

envtmpl是我的环境模板的二进制代表。它将环境转换为golang map[string]string,然后将其转换为模板以生成代码。

local$ envtmpl --output=./src/zquery/report_Customers.go report.go.envtmpl
./regen.sh[174]: envtmpl: Argument list too long

argument list不太长,它必须是环境的内容。

更新:我已经对您的测试进行了测试,以查看我到底有多少“内存”可用。似乎我的想法超出了我的想象,现在,当有两个简单的参数时,我必须重新考虑此错误消息的含义Argument list too long。所以问题是这个错误真正是从哪里来的,它是什么意思?

obsd66:~/dev/zurvita/zquery$export var=1234578901234456789012345678901234567890123456789012345789012344567890123456789012345678901234567890
obsd66:~$while (( i++ < 10000 )) ;do  var=$var$var ; print "i=$i\t" ${#var} ; done
i=1      200
i=2      400
i=3      800
i=4      1600
i=5      3200
i=6      6400
i=7      12800
i=8      25600
i=9      51200
i=10     102400
i=11     204800
i=12     409600
i=13     819200
i=14     1638400
i=15     3276800
i=16     6553600
i=17     13107200
i=18     26214400
i=19     52428800
i=20     104857600
i=21     209715200
i=22     419430400
ksh: internal error: unable to allocate memory
obsd66:~$echo $KSH_VERSION
@(#)PD KSH v5.2.14 99/07/13.2

更新:我将命令envtmpl...完全替换为ls -l,并且仅引用ls时收到相同的错误。因此,它不是环境内存,也不是变量扩展。

更新:我尝试使用ls而不是ls -l来获得相同的结果。

更新:openbsd中的getconf ARG_MAX产生的数字是我的linux计算机的2倍。在Linux上有效,但在openbsd上无效。

linshumian999 回答:用完ksh和bash中的环境空间后,如何查看剩余量

暂时没有好的解决方案,如果你有好的解决方案,请发邮件至:iooj@foxmail.com
本文链接:https://www.f2er.com/2812975.html

大家都在问