代码之家  ›  专栏  ›  技术社区  ›  stevec Zxeenu

如何从R获取macOS名称(例如catalina、mojave)?

r
  •  0
  • stevec Zxeenu  · 技术社区  · 4 年前

    Sys.info() operating system and its version 具有

    Sys.info()['sysname']
     sysname 
    "Darwin"
    

    但是我们如何才能准确地看到macOS呢 名称 (例如Catalina、Mojave、Big Sur等)?

    1 回复  |  直到 4 年前
        1
  •  2
  •   stevec Zxeenu    4 年前

    R本身也会这样做 utils:::.osVersion() 它(在r4.0.2中)看起来(对于你关心的部分)是什么样子的

           "Darwin" = {
               ver <- readLines("/System/Library/CoreServices/SystemVersion.plist")
               ind <- grep("ProductUserVisibleVersion", ver)
               ver <- ver[ind + 1L]
               ver <- sub(".*<string>", "", ver)
               ver <- sub("</string>$", "", ver)
               ver1 <- strsplit(ver, ".", fixed = TRUE)[[1L]][2L]
               sprintf("%s %s %s",
                       ifelse(as.numeric(ver1) < 12, "OS X", "macOS"),
                       switch(ver1,
                              ## 10.6 is earliest that can be installed
                              "6" = "Snow Leopard",
                              "7" = "Lion",
                              "8" = "Mountain Lion",
                              "9" = "Mavericks",
                              "10" = "Yosemite",
                              "11" = "El Capitan",
                              "12" = "Sierra",
                              "13" = "High Sierra",
                              "14" = "Mojave",
                              "15" = "Catalina",
                              ""), ver)
           },
    

    它在中定义,在中定义 src/library/utils/R/sessionInfo.R ;你可以用另一个函数看到整个函数 switch 其他操作系统的部件。

               if(ver1[1L] == "10")
                   sprintf("%s %s %s",
                           ifelse(as.numeric(ver2) < 12, "OS X", "macOS"),
                           switch(ver2,
                                  ## 10.6 is earliest that can be installed
                                  "6" = "Snow Leopard",
                                  "7" = "Lion",
                                  "8" = "Mountain Lion",
                                  "9" = "Mavericks",
                                  "10" = "Yosemite",
                                  "11" = "El Capitan",
                                  "12" = "Sierra",
                                  "13" = "High Sierra",
                                  "14" = "Mojave",
                                  "15" = "Catalina",
                                  "16" = "Big Sur", # probably not 10.16
                                  ""),
                           ver)
               else
                   sprintf("macOS %s %s",
                           switch(ver2,
                                  "0" = "Big Sur",
                                  ""),
                           ver)
    

    问题是 . 前几天我试图找到规范的Linux基本发行版名称(比如 debian8 , centos7