';结束';预计将关闭if-lua

';结束';预计将关闭if-lua,lua,openwrt,expected-exception,Lua,Openwrt,Expected Exception,我有以下代码作为我正在制作的应用程序的web界面的一部分。我得到一个错误,它说它期望一个“结束”关闭一个if语句,但我看不到任何未正确关闭的语句 任何帮助都将受到感谢 错误: /usr/lib/lua/luci/dispatcher.lua:448: Failed to execute firstchild dispatcher target for entry '/admin/network/amld'. The called action terminated with an excepti

我有以下代码作为我正在制作的应用程序的web界面的一部分。我得到一个错误,它说它期望一个“结束”关闭一个if语句,但我看不到任何未正确关闭的语句

任何帮助都将受到感谢

错误:

/usr/lib/lua/luci/dispatcher.lua:448: Failed to execute firstchild dispatcher target for entry '/admin/network/amld'.
The called action terminated with an exception:
/usr/lib/lua/luci/dispatcher.lua:448: Failed to execute cbi dispatcher target for entry '/admin/network/amld/amld_status'.
The called action terminated with an exception:
/usr/lib/lua/luci/cbi.lua:75: /usr/lib/lua/luci/model/cbi/amld/amld_status.lua:122: 'end' expected (to close 'if' at line 78) near '<eof>'
stack traceback:
    [C]: in function 'assert'
    /usr/lib/lua/luci/dispatcher.lua:448: in function 'dispatch'
    /usr/lib/lua/luci/dispatcher.lua:195: in function </usr/lib/lua/luci/dispatcher.lua:194>

在我看来,应该在
build\u run\u time\u args
之前添加
end
。那里的
end
在提交后关闭了分配给
的函数

你为什么不试试通常的技术,直到它工作为止?我一直在尝试,问题是操作系统只是命令行,每次你更新界面的源代码时,你都必须重新启动,这是浪费时间/令人沮丧的。我感觉问题是
如果registed\u s==“true”,那么
,因为那是我遇到所有麻烦的时候。在我看来,应该在
构建运行时参数
之前添加
结束
。那里的
结束
在提交后关闭了分配给
的函数。啊,谢谢@lhf!你愿意把答案贴出来吗?@Tom:你不需要在远程机器上解决这个问题。将单个文件复制到桌面计算机,并使用lua/luac编译它。这是一个语法错误,而不是运行时错误,因此您不需要在桌面上安装其他库。实际上,如果你在这个应用程序中出现语法错误,你就不可能“打扰”我们。
local fs = require "nixio.fs"
local sys = require "luci.sys"
local uci = require "luci.model.uci".cursor()

registered_s = uci.get("amld_cbi", "amld", "registered")
m = Map("amld_cbi", translate("amld"))
if registered_s == "true" then

    s = m:section(TypedSection, "amld_conf", "Status")

    fqdn = s:option(DummyValue, "fqdn", "concentrator")

    local updown = s:option( Button, "_updown", translate("Start / Stop") )
    updown._state = false
    function updown.cbid(self, section)
        local pid = fs.readfile("/var/run/amld.pid")
        self._state = pid and #pid > 0 and sys.process.signal(pid, 0)
        self.option = self._state and "stop" or "start"
        return AbstractValue.cbid(self, section)
    end
    function updown.cfgvalue(self,section)
        self.title = self._state and "stop" or "start"
        self.inputstyle = self._state and "reset" or "reload"
    end
    function updown.write(self,section,value)
        if self.option == "stop" then
            luci.sys.call("killall -HUP amld")
        else
            args = build_run_time_args()
            luci.sys.call("amld " .. args)
        end
    end

elseif registered_s == "false" then

    s = m:section(TypedSection, "amld_conf", "Register amld")

    username = d:option(Value, "username","Username");username.optional=false;
    password = d:option(Value, "password","Password");password.optional=false;

    m.on_after_commit = function(self) -- Make sure this doesn't get called if registered = true
        register_device()
end

function build_run_time_args()
    local args = ""

    username_s = uci.get("amld_cbi", "amld", "username")
    if username_s ~= nil and username_s ~= "" then
        args = args .. " -u " .. username_s .. " "
    end

    password_s = uci.get("amld_cbi", "amld", "password")
    if password_s ~= nil and password_s ~= "" then
        args = args .. " -p " .. password_s .. " "
    end

    passphrase_s = uci.get("amld_cbi", "amld", "passphrase")
    if passphrase_s ~= nil and passphrase_s ~= "" then
        args = args .. " -P " .. passphrase_s .. " "
    end

    tun_dev_s = uci.get("amld_cbi", "amld", "tun_dev")
    if tun_dev_s ~= nil and tun_dev_s ~= "" then
        args = args .. " -t " .. tun_dev_s .. " "
    end

    interface_s = uci.get("amld_cbi", "amld", "interface")
    if interface_s ~= nil and interface_s ~= "" then
        args = args .. " -i " .. interface_s .. " "
    end

    gateway_s = uci.get("amld_cbi", "amld", "gateway")
    if gateway_s ~= nil and gateway_s ~= "" then
        args = args .. " -g " .. gateway_s .. " "
    end

    cacert_s = uci.get("amld_cbi", "amld", "cacert")
    if cacert_s ~= nil and cacert_s ~= "" then
        args = args .. " -C " .. cacert_s .. " "
    end

    test_s = uci.get("amld_cbi", "amld", "test")
    if test_s ~= nil and test_s == "1" then
        args = args .. " -T "
    end

    foreground_s = uci.get("amld_cbi", "amld", "foreground")
    if foreground_s ~= nil and foreground_s == "1" then
        args = args .. " -f "
    end

    debug_s = uci.get("amld_cbi", "amld", "debug")
    if debug_s ~= nil and debug_s == "1" then
        args = args .. " -x "
    end

    bundle_s = uci.get("amld_cbi", "amld", "bundle")
    if bundle_s ~= nil and bundle_s ~= "" then
        args = args .. " " .. bundle_s .. " "
    end

    fqdn_s = uci.get("amld_cbi", "amld", "fqdn")
    if fqdn_s ~= nil and fqdn_s ~= "" then
        args = args .. " " .. fqdn_s .. " "
    end

    sysconf_s = io.open("/etc/config/amld.sysconf", "r")
    if sysconf_s ~= nil then
        args = args .. " -s " .. " /etc/config/amld.sysconf "   
        io.close(sysconf_s)
    end
    return args
end

function register_device()

    --run aml in test mode, if success, set registered, else ...?
    uci.set("amld_cbi", "amld", "registered", "true")
end

return m