Frage

Ok ich brauche das System des OS aus einem Lua-Script, um zu bestimmen, aber Lua als solche hat keine API für diese, so verwende ich os.getenv () und Abfrage enviromental Variablen. Unter Windows dem enviromental Variable „O“ gibt mir den Namen des Systems O überprüft, aber gibt es einige Variablen, die sowohl unter Windows und den meisten Unix-Varianten gibt, die überprüft werden können?

War es hilfreich?

Lösung

Auf einem Unix-System versuchen os.capture 'uname' wo os.capture unten definiert ist:

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

Dies wird auf allen Versionen von Unix helfen und auf Mac OSX. Wenn es fehlschlägt, können Sie auf einem Windows-System sein? Oder schauen Sie os.getenv 'HOME'.

Andere Tipps

Sie können versuchen, package.config:sub(1,1). Es gibt den Pfad Separator, der unter Windows und '\\' auf Unixes '/' ist ...

Ich denke, dass, wenn Sie nur Windows- / Unix Erkennung benötigen, können Sie das Dateisystem für die Existenz von / etc überprüfen oder / sind oder / boot-Verzeichnisse. Aditionally, wenn Sie wissen müssen, welche Distribution ist es, die meisten Linux-Distributionen haben eine kleine Datei in / etc die Distribution und Version zeigt, leider alle Namen sie es anders.

Wenn lua kompiliert wird, ist es etwas anders konfiguriert je nachdem, welches Betriebssystem es kompiliert wird.

Viele der Strings, die in dem ‚Paket‘ Modul eingestellt werden somit verwendet werden können, zu unterscheiden, welches System es kompiliert wurde.

Zum Beispiel, wenn LUA Lasten C-basierte Module, die als dynamische Bibliotheken verteilt sind, hat es die Erweiterung für die Bibliotheken kennen, die auf jedes O unterschiedlich ist.

So können Sie eine Funktion wie die das Betriebssystem zu bestimmen folgenden verwenden.

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

Unixes sollte die $ HOME Variable (während Windows hat nicht so), so können Sie es überprüfen (nach Überprüfung der OS-Variable leer ist).

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top