Lua沙箱加载许多脚本

时间:2017-03-27 07:27:44

标签: lua wrapper sandbox lua-5.1

我想制作一个可以定期加载脚本的包装器,但是在加载另一个之前删除之前的脚本数据,加载的脚本应该可以访问除某些函数之外的所有全局函数,例如" print&#34 ;,它应该修改一些函数行为。 目前我有这个代码:

local _print = print
local _globalFunc = globalFunc
local env = {}

function newEnviorment()
  env = _G
  env.globalFunc = function() end
  env.print = function (msg)
    _print('Wrapper says: '.. msg)
  end
  env.Somefunc = function() end
end

function loadScript (script)
  local loaded = loadstring(script)
  if loaded then
    setfenv(loaded, env)
    local ex = pcall(loaded)
  end
end

当我想加载一个新脚本时,我称之为这两个函数,这个代码有什么问题,因为它没有按预期工作。

1 个答案:

答案 0 :(得分:2)

function newEnvironment()
  env = setmetatable({}, {__index = _G})
  env.globalFunc = function() end
  env.print = function (msg)
    _print('Wrapper says: '.. msg)
  end
  env.Somefunc = function() end
end