Вопрос

Хорошо, мне нужно определить операционную систему из сценария Lua, но Lua как таковой не имеет API для этого, поэтому я использую os.getenv () и запрашиваю переменные среды. В Windows проверяется переменная среды " OS " дает мне имя операционной системы, но есть ли переменная, которая существует как в Windows, так и в большинстве разновидностей Unix, которые можно проверить?

Это было полезно?

Решение

В системе 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+

Это поможет для всех версий Unix и Mac OSX. Если это не удается, возможно, вы находитесь в системе Windows? Или проверьте os.getenv «ДОМ».

, '') s = string.gsub(s, '[\n\r]+', ' ') return s end

Это поможет для всех версий Unix и Mac OSX. Если это не удается, возможно, вы находитесь в системе Windows? Или проверьте os.getenv «ДОМ».

Другие советы

Вы можете попробовать package.config: sub (1,1) . Он возвращает разделитель пути: '\\' в Windows и '/' в Unixes ...

Полагаю, что если вам просто нужно обнаружение Windows / Unix, вы можете проверить файловую систему на наличие каталогов / etc, / bin или / boot. Кроме того, если вам нужно знать, какой это дистрибутив, у большинства дистрибутивов Linux есть небольшой файл в / etc, показывающий дистрибутив и версию, к сожалению, все они называют его по-разному.

Когда компилируется 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

В Unix-файлах должна быть переменная $ HOME (в то время как в Windows ее нет), так что вы можете проверить ее (после проверки, что переменная ОС пуста).

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top