【问题标题】:Check if DOS or bash from inside web app [closed]从 Web 应用程序内部检查 DOS 或 bash [关闭]
【发布时间】:2012-05-09 20:46:02
【问题描述】:

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

【问题讨论】:

  • @gpojd 否定。不是在寻找仅限 Ruby 的答案。
  • @KyleMacey:你的目标技术是什么?每种语言都可能有自己的检测宿主操作系统的方式;我怀疑是否存在一种普遍适用的技术。
  • @maerics 好吧,我在想一些类似于测试cd /opt 的东西,它只能在 Unix 中工作。甚至ping 在两个平台上的响应也不同。

标签: bash dos


【解决方案1】:

尝试检查RUBY_PLATFORM global constant

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

【讨论】:

  • 您可能会遇到此问题的唯一一次是使用 jRuby,我相信无论底层平台如何,它都会报告“java”。
  • 请看我的编辑。 +1 Ruby 解决方案
  • 是的!按照我的想法,应该是普遍的!
【解决方案2】:

保持简单。尝试运行仅存在于所需平台上的命令

dos:cmd

尼克斯:man

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

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

【讨论】:

    【解决方案3】:

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-05-05
      • 2010-09-07
      • 1970-01-01
      • 2016-04-11
      • 1970-01-01
      • 1970-01-01
      • 2011-10-05
      相关资源
      最近更新 更多