好的,我需要从 Lua 脚本中确定系统的操作系统,但是 Lua 本身没有用于此的 API,所以我使用 os.getenv() 并查询环境变量。在 Windows 上检查环境变量“OS”给了我系统操作系统的名称,但是在 Windows 和大多数风格的 Unix 上是否存在一些可以检查的变量?
Robert Gould
问问题
13913 次
5 回答
30
你可以试试package.config:sub(1,1)
。它返回路径分隔符,'\\'
在 Windows 和'/'
Unix 上...
于 2013-01-20T15:08:01.763 回答
10
在 Unix 系统上,尝试 os.capture 'uname' ,其中 os.capture 定义如下:
函数 os.capture(cmd, raw) 本地 f = 断言(io.popen(cmd,'r')) 本地 s = assert(f:read('*a')) f:关闭() 如果原始则返回 s 结束 s = string.gsub(s, '^%s+', '') s = string.gsub(s, '%s+$', '') s = string.gsub(s, '[\n\r]+', ' ') 返回 结尾
这将有助于所有风格的 unix 和 Mac OSX。如果失败,您可能在 Windows 系统上?或者检查 os.getenv 'HOME'。
于 2008-11-28T21:05:00.437 回答
6
编译 lua 时,根据编译的操作系统,它的配置略有不同。
因此,在“包”模块中设置的许多字符串可以用来区分它是为哪个系统编译的。
例如,当 lua 加载作为动态库分发的基于 C 的模块时,它必须知道用于这些库的扩展名,这在每个操作系统上都不同。
因此,您可以使用如下函数来确定操作系统。
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
于 2015-06-21T00:06:46.257 回答
4
我想如果你只需要 Windows/Unix 检测,你可以检查文件系统是否存在 /etc 或 /bin 或 /boot 目录。此外,如果您需要知道它是哪个发行版,大多数 Linux 发行版在 /etc 中都有一个小文件显示发行版和版本,遗憾的是它们的名称都不同。
于 2008-11-17T07:34:19.140 回答
1
Unix 应该有 $HOME 变量(而 Windows 没有),所以你可以检查它(在检查 OS 变量为空之后)。
于 2008-11-17T07:28:37.700 回答