我正在寻找一种强大、优雅且可移植的解决方案来获取 Ruby 中的用户名、主机名和操作系统名。我想创建一个这样设置的文件夹结构:
linux/maschine1/user53, or
linux/maschine2/user53, or
windows/maschine1/user53, or
mac/supermac/superuser
用户名和主机名应反映user@computer:~$
在 linux shell 上,操作系统应分为win
、linux
和mac
。
我找到了几种方法,使用ENV['USER'/'USERNAME']
或Etc.getLogin()
作为用户名,Socket.gethostname
计算机名和RUBY_PLATFORM
操作系统名的常量。但在 JRuby 等不同平台甚至不同操作系统上运行时,它们都存在问题。
那么哪种选择对每个人来说都是最好的呢?
谢谢!
编辑:
在给出答案之前不久,我来到了这个解决方案。由于 Buildr 也可以使用 Java 命令,因此可以获得如下值:
os = Java.java.lang.System.getProperty('os.name')
usr = Java.java.lang.System.getProperty('user.name')
host = Java.java.net.InetAddress.getLocalHost().getHostName()
但我想我会使用纯 ruby 的方式来尽可能地保持语言的一致性。