假设我有一个Web应用程序,具有某种系统执行功能。我将在这个例子中使用 Ruby。此应用程序可以是便携式的,并安装在Windows或Unix服务器上。如果应用程序使用系统命令,有没有办法区分服务器是什么平台,然后也许在if
语句中捕获?
理论上是这样的:
os_check = `checkos` # System ticks to execute through the shell
# using fake command
if os_check == 'unix'
# Run Unix Commands
`ls -la`
else if os_check == 'dos'
# Run DOS commands
`dir`
else
puts 'OS not detectable'
end
编辑
我不是在专门寻找 Ruby(删除了标签)。这是一个例子。我希望有一个可以在两种环境中执行并根据操作系统而可变的 shell 命令。实际上,我必须在多种语言中复制这种功能。很抱歉有任何困惑。
尝试检查RUBY_PLATFORM
全局常量:
case RUBY_PLATFORM
when /win32/ then # Windows, use "dir"
# when /darwin/ then # Mac OS X
# when /linux/ then # Linux
else # Assume "ls" on all other platforms
end
[编辑] 根据更新的问题,您也许能够发出系统命令echo /?
并解析输出以确定主机操作系统。 "echo"命令应该存在于大多数系统上,但Windows将/?
开关解释为"帮助"消息,而UNIX操作系统只是回显这些字符。 例如(同样在 Ruby 中,只是为了演示一般策略):
def detect_host_operating_system
(%x{echo /?} =~ /^/?r?n$/) ? 'unix' : 'windows'
end
保持简单。尝试运行仅存在于所需平台上的命令
做事:cmd
尼克斯:man
一些没有参数的三元运行的结果状态是这里的关键。
使用此方法时,没有字符串解析。哪个更优化。
你可以尝试用Python来做,这种脚本语言默认安装在大多数Linux发行版和Mac上(我认为也在像BSD这样的Unix系统上,但我不完全确定)。
import os
if (os.name == "posix"):
#run unix command
else:
#run Windows command
当然,如果您愿意,也可以添加更多操作系统检查。