在Lua 5.3脚本中设置shell环境变量

在Lua 5.3脚本中设置shell环境变量

问题描述:

仅限于Lua的Windows嵌入式实例 - 共享环境 - 对语言的最新更改。在Lua 5.3脚本中设置shell环境变量

Lua脚本的结果需要提供给嵌入式Lua 5.3解释器的Windows主机应用程序。大多数情况下,我们会将结果写入文本文件或剪贴板,并让主机在脚本完成后读取这些结果。另一种方法是在当前宿主和解释器共享的环境中设置一个envar(环境变量)。它会消除fileIO和一些字符串复制操作。

Lua有os.getenv()但是没有os.setenv()因为后者不是ANSI-C的一部分。声称能够更改环境变量的外部模块似乎在_G中更改了本地副本,而不是真正的主机当前环境。 (因为我没有阅读所有的资料,所以我在这里以他们的封面来判断这些书籍。)此外,自5.3版本以来,全球变量_G不再存在,我假定这些模块中的大多数不会与当前版本的Lua。

问题:哪个模块允许在当前环境中更改变量并且与Lua 5.3兼容?

+0

[如何使用lua设置bash环境变量](http://stackoverflow.com/questions/38907930/how-to-set-bash-environment-variables-using-lua) –

+0

第一行总结我的问题有四点不同。 – user123365

+0

可以尝试我的https://github.com/moteus/lua-environ。但是它不允许改变一些外国程序的环境。仅适用于当前进程。 – moteus

您可以使用winapi模块中的setenv来更改当前进程的环境(它在内部使用SetEnvironmentVariable)。

+0

这个函数有缓冲区溢出的问题。我在4年前就报道过这个问题。测试用例'setenv('xxxx',('1'):rep(1300)' – moteus

+0

我确信史蒂夫将会收到一个请求... –