我如何在Lua脚本中确定系统的操作系统?
2008-11-17 7:24:7
收藏:0
 阅读:1149
 评论:6
我需要从 Lua 脚本中确定系统的操作系统(OS),但是 Lua 没有相应的 API,所以我使用 os.getenv() 和查询环境变量。在 Windows 上,检查环境变量"OS"可以获取系统的操作系统名称,但是是否存在某个变量在 Windows 和大多数 Unix 变种上都可检查呢?
点赞
 
                        用户5190
                    
 我想如果你只需要检测 Windows/Unix,你可以检查文件系统是否存在 /etc 或者 /bin 或者 /boot 目录。此外,如果你需要知道是哪个发行版,大多数 Linux 发行版在 /etc 中都有一个显示发行版和版本的小文件,但很遗憾,它们都以不同的名称命名。
                        2008-11-17 07:34:19
                    
                        用户41661
                    
 在 Unix 系统上,尝试使用以下定义的 os.capture 'uname':
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'。
                        2008-11-28 21:05:00
                    
                        用户626431
                    
 你可以尝试使用 package.config:sub(1,1)。它会返回路径分隔符,在 Windows 下为 '\\' ,在 Unix 系统下为 '/'...
                        2013-01-20 15:08:01
                    
                        用户5032278
                    
 当编译lua时,根据编译所用的操作系统而做出略微不同的配置。
因此,'package'模块中设置的许多字符串可以用于区分其编译所用的操作系统。
例如,当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-21 00:06:46
                    
                        用户2805176
                    
 FWIW(顺便说一句),我能想到的最简单的函数如下:
function MyScript:OS()
    return package.config:sub(1,1) == "\\" and "win" or "unix"
end
                        2022-10-14 18:39:41
                    
                评论区的留言会收到邮件通知哦~
            
  
                推荐文章
            
 - 如何将两个不同的lua文件合成一个 东西有点长 大佬请耐心看完 我是小白研究几天了都没搞定
 - 如何在roblox studio中1:1导入真实世界的地形?
 - 求解,lua_resume的第二次调用继续执行协程问题。
 - 【上海普陀区】内向猫网络招募【Skynet游戏框架Lua后端程序员】
 - SF爱好求教:如何用lua实现游戏内调用数据库函数实现账号密码注册?
 - Lua实现网站后台开发
 - LUA错误显式返回,社区常见的规约是怎么样的
 - lua5.3下载库失败
 - 请问如何实现文本框内容和某个网页搜索框内容连接,并把网页输出来的结果反馈到另外一个文本框上
 - lua lanes多线程使用
 - 一个kv数据库
 - openresty 有没有比较轻量的 docker 镜像
 - 想问一下,有大佬用过luacurl吗
 - 在Lua执行过程中使用Load函数出现问题
 - 为什么 neovim 里没有显示一些特殊字符?
 - Lua比较两个表的值(不考虑键的顺序)
 - 有个lua简单的项目,外包,有意者加微信 liuheng600456详谈,最好在成都
 - 如何在 Visual Studio 2022 中运行 Lua 代码?
 - addEventListener 返回 nil Lua
 - Lua中获取用户配置主目录的跨平台方法
 
Unixes应该有$ HOME变量(而Windows没有),因此您可以在检查OS变量为空之后检查它。