在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
语句中打开,或者我是否可以实际获取该信息。这可能吗?
iex> :os.type
{:unix, :darwin}
iex> System.cmd("uname", ["-s"])
{"Darwin\n", 0}
答案 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
的该函数。