0

注意:这个技巧也适用于 Lua 以外的脚本语言,或在某些情况下可能被视为应用程序而在其他情况下被视为文档的任何其他文档类型。

如果解释器已经与.lua在 Windows 中处理文件相关联(即,如果双击.lua文件在解释器中运行它),则很容易使它们直接在命令行上执行。

你需要:

  1. 将脚本放在PATH环境变量中列出的目录中;
  2. .lua扩展名添加到PATHEXT环境变量。

通过这种方式,您可以通过在命令行中键入其名称来运行任何Lua 脚本。现在的问题是,您不能将另一个 Lua 脚本放在 PATH 上的任何目录中而不冒执行它的风险,即使您不希望它被执行。(这样的 .lua 文件的一个示例是您的程序专用的模块,该require模块将由.lua.

所以这是一个全有或全无的情况。您要么允许执行路径上的目录中的任何脚本,要么不允许执行。

有没有办法只允许路径上的目录中的某些脚本可以运行,键入它们的名称?

4

1 回答 1

2

诀窍是控制台PATHEXT 机制理解“双重扩展”,即添加一个.exe.lua“扩展”PATHEXT将只执行那些全名结尾的Lua 脚本.exe.lua(当然你可以选择另一个扩展,比如.run.lua)。注意:我使用引号是为了避免可能的混淆和缺少更好的术语(请记住,按照惯例,文件扩展名是文件名中最后一个点之后的部分)。

因此,通过添加.exe.luaPATHEXTonlywhatevername.exe.lua将是可执行的,而任何其他 Lua 脚本都不会(假设它没有相同的“双扩展名”)。

这允许将“普通”脚本与“可执行”脚本区分开来,而无需将它们分隔在不同的目录中或定义新的自定义文件扩展名,这涉及修改注册表。

此外,由于此行为由环境变量控制,因此它是每个进程的设置 - 您只能为特定的控制台窗口启用它。例如,如果您使用以下内容创建批处理文件:

@set PATHEXT=%PATHEXT%;.exe.lua &cmd /K

然后运行它,它将打开一个控制台,该控制台将能够执行.exe.lua路径上找到的所有脚本,但不能执行任何其他.lua脚本。

于 2013-08-18T21:28:59.773 回答