如何从Lua脚本中确定系统的操作系统?
问题描述:
好吧,我需要从Lua脚本中确定系统的操作系统,但Lua本身没有API,所以我使用os.getenv()和查询环境变量。在Windows上检查环境变量“OS”给我的系统的操作系统的名称,但是有一些变量存在于Windows和大多数Unix的口味可以检查?如何从Lua脚本中确定系统的操作系统?
答
在Unix系统中,尝试os.capture 'UNAME',其中os.capture定义如下:
function os.capture(cmd, raw) local f = assert(io.popen(cmd, 'r')) local s = assert(f:read('*a')) f:close() if raw then return s end s = string.gsub(s, '^%s+', '') s = string.gsub(s, '%s+$', '') s = string.gsub(s, '[\n\r]+', ' ') return s end
这将有助于在Unix和Mac OSX上的所有口味。 如果失败,您可能在Windows系统上?或者检查os.getenv'HOME'。
答
Unix应该有$ HOME变量(而Windows没有),所以你可以检查它(在检查OS变量为空之后)。
答
我想如果你只是需要Windows/Unix检测,你可以检查文件系统是否存在/ etc或/ bin或/ boot目录。此外,如果您需要知道哪个发行版,大多数Linux发行版都会在/ etc中显示一些文件来显示发行版和版本,但不幸的是,它们都以不同的名称命名。
答
你可以试试package.config:sub(1,1)
。它返回路径分隔符,在Windows上是'\\'
,在Unix上是'/'
...
答
当编译lua时,根据编译的操作系统的不同,它的配置稍有不同。
因此可以使用“包”模块中设置的许多字符串来区分它编译的系统。
例如,当lua加载以动态库形式分发的基于C的模块时,它必须知道这些库所使用的扩展,这在每个OS上都是不同的。
因此,您可以使用类似下面的函数来确定操作系统。
local BinaryFormat = package.cpath:match("%p[\\|/]?%p(%a+)")
if BinaryFormat == "dll" then
function os.name()
return "Windows"
end
elseif BinaryFormat == "so" then
function os.name()
return "Linux"
end
elseif BinaryFormat == "dylib" then
function os.name()
return "MacOS"
end
end
BinaryFormat = nil
windows has = HOME =以及 – 2012-10-20 01:20:07
在我检查过的每个Windows版本中,没有HOME环境变量。尝试从命令提示符执行“echo%HOME%”。 – 2012-10-21 08:09:31
Windows 7(v 6.1,build 7601)拥有HOME,您检查了哪个操作系统版本? – 2012-10-21 08:15:30