-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 を探しているわけではありません (タグを削除しました)。それは一例でした。私は、両方の環境で実行でき、OS の種類に基づいて変更できるシェル コマンドを期待していました。実際には、この種の機能をいくつかの言語で複製する必要があります。混乱して申し訳ありません。

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 /?、出力を解析してホストOSを判別できる場合があります。「echo」コマンドはほとんどのシステムに存在するはずですが、Windowsは/?スイッチを「ヘルプ」メッセージとして解釈しますが、UNIXOSは単にそれらの文字をエコーし​​ます。たとえば(ここでも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

もちろん、必要に応じてOSチェックを追加することもできます。

于 2012-05-09T21:36:01.290 に答える