如何在Elixir中获取当前的操作系统名称?

时间:2015-11-01 10:44:55

标签: elixir

在Ruby中,我会使用RUBY_PLATFORM常量来确定我的程序运行的操作系统(Mac,Windows,Linux等)。 Elixir有办法获得这些信息吗?

我目前正在尝试重新创建我在Elixir中编写的Ruby程序,并且我有一个方法可以进行依赖于操作系统的系统调用以打开文档。该方法类似于:

def self.open_document(filename)
  case RUBY_PLATFORM
  when %r(darwin)
    system('open', filename)
  when %r(linux)
    system('xdg-open', filename)
  when %r(windows)
    system('cmd', '/c', "\"start #{filename}\"")
  else
    puts "Don't know how to open file"
  end
end

我知道我可以使用Elixir Kernel.system运行Ruby System.cmd/3命令,但我不确定如何使RUBY_PLATFORM值等效于在case语句中打开,或者我是否可以实际获取该信息。这可能吗?

更新

根据Lol4t0' answer进一步参考:

iex> :os.type
{:unix, :darwin}
iex> System.cmd("uname", ["-s"])
{"Darwin\n", 0}

1 个答案:

答案 0 :(得分:16)

您可以致电Erlang os:type获取平台名称信息:

type() -> {Osfamily, Osname}
     

类型:

Osfamily = unix | win32
Osname = atom()
     

返回Osfamily,在某些情况下,还返回当前的Osname   操作系统。

     

在Unix上,Osname与uname -s返回的值相同,但是在   小写。例如,在Solaris 1和2上,它将是sunos。

     

在Windows中,Osname将是nt(在Windows NT上)或windows   (在Windows 95上)。

在Elixir你可能需要打电话

:os.type()

引用Osfamily:unix:win32的该函数。