【问题标题】:Why is LUA_PATH containing a bang (!) mangled on Windows?为什么 LUA_PATH 在 Windows 上包含一个爆炸(!)?
【发布时间】:2012-10-05 19:02:21
【问题描述】:

我有一个文件main.lua

require("hello")

和目录foo bar! baz 中的文件hello.lua(带有!):

module(...,package.seeall)
print("hello from hello.lua")

当我(在 Windows 上)将环境变量 LUA_PATH 设置为目录时:

set LUA_PATH="C:\Programme\Lua\5.1\foo bar! baz\?.lua"

我收到一个奇怪的错误:

C:\Programme\Lua\5.1>lua main.lua
lua: main.lua:4: module 'hello' not found:
        no field package.preload['hello']
        no file '"C:\Programme\Lua\5.1\foo barC:\Programme\Lua\5.1 baz\hello.lua
"'
        no file '.\hello.dll'
        no file '.\hello51.dll'
        no file 'C:\Programme\Lua\5.1\hello.dll'
        no file 'C:\Programme\Lua\5.1\hello51.dll'
        no file 'C:\Programme\Lua\5.1\clibs\hello.dll'
        no file 'C:\Programme\Lua\5.1\clibs\hello51.dll'
        no file 'C:\Programme\Lua\5.1\loadall.dll'
        no file 'C:\Programme\Lua\5.1\clibs\loadall.dll'
stack traceback:
        [C]: in function 'require'
        main.lua:4: in main chunk
        [C]: ?

看到C:\Programme\Lua\5.1\foo barC:\Programme\Lua\5.1 baz\hello.lua这个很奇怪的路径了吗?感叹号(bang)有什么特别之处?如何在 Windows 中做到这一点?在 Mac 上,这似乎工作正常。

【问题讨论】:

  • @TheZ 是的,没错,非常感谢!您可以将其发布为答案吗?
  • 坚持使用无标点符号、仅 ASCII 目录名称的另一个原因 ...
  • @jpjacobs 多么有建设性的命令 :) 我从来没想过。

标签: windows lua


【解决方案1】:

"这种替换只发生在 Lua 第一次设置路径时 (来自LUA_PATH 或来自 luaconf 的默认值)。如果你 通过其他方式设置路径,可以避免问题。”

更多信息和潜在替代方案:http://lua-users.org/lists/lua-l/2012-08/msg00052.html

【讨论】:

    【解决方案2】:

    解释是正确的(它是 Windows 上记录的行为),但我也可以提供一个可能的解决方案(或者更确切地说是一种解决方法):因为只有第一个感叹号将被替换,而不是使用 set LUA_PATH="C:\Programme\Lua\5.1\foo bar! baz\?.lua",使用:

    set LUA_PATH="!\foo bar! baz\?.lua"
    

    【讨论】:

      猜你喜欢
      • 2018-02-17
      • 2011-07-18
      • 1970-01-01
      • 1970-01-01
      • 2016-05-10
      • 2011-04-20
      • 2019-11-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多