-1

假设我有一个具有某种系统执行功能的 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 命令可以在两种环境中执行,并且可以根据操作系统是可变的。我实际上必须用几种语言复制这种功能。很抱歉有任何混淆。

4

3 回答 3

1

尝试检查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
于 2012-05-09T20:57:51.047 回答
1

把事情简单化。尝试运行仅存在于所需平台上的命令

应:cmd

尼克斯:man

一些没有参数的琐碎运行的结果状态是这里的关键。

使用这种方法没有字符串解析。哪个更优化。

于 2012-05-09T21:28:25.900 回答
0

您可以尝试使用 Python 来实现,这种脚本语言默认安装在大多数 Linux 发行版和 Mac 上(我认为也安装在像 BSD 这样的 Unix 系统上,但我对此并不完全确定)。

import os

if (os.name == "posix"):
    #run unix command
else:
    #run Windows command

当然,您也可以根据需要添加更多操作系统检查。

于 2012-05-09T21:36:01.290 回答