2012-05-09 6 views
-1

Webアプリケーションがあり、何らかのシステム実行があるとします。この例ではRubyを使用します。このアプリは移植可能で、WindowsまたはUnixサーバーにインストールできます。アプリがシステムコマンドを使用している場合、サーバーがどのプラットフォームであるかを区別する方法がありますか?ifステートメントをキャッチしますか?理論的にはこのようなWebアプリケーション内からDOSまたはbashを確認する

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 

EDIT

私は(タグ削除)、具体的ルビーを探していませんよ。それが一例でした。私は両方の環境で実行可能で、OSが何であるかに基づいて可変なシェルコマンドを期待していました。実際には、この種の関数をいくつかの言語で複製する必要があります。混乱を招いて申し訳ありません。

+0

[Rubyの実行環境を判断する方法](http://stackoverflow.com/questions/6523038/ruby-how-to-determine-execution-environment) – gpojd

+0

@gpojdネガティブ。 Rubyだけの答えを探しているわけではありません。 –

+0

@KyleMacey:あなたの目標技術は何ですか?各言語は、ホストオペレーティングシステムを検出する独自の方法を持つ可能性があります。私は普遍的に働く技術があるのではないかと疑います。 – maerics

答えて

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 /?を発行し、ホストOSを決定するために出力を解析することができるかもしれません。 "echo"コマンドはほとんどのシステム上に存在するはずですが、Windowsは/?スイッチを "ヘルプ"メッセージとして解釈しますが、UNIX OSは単にそれらの文字をエコーし​​ます。たとえば(一般的な戦略を示すためにRubyで再び):

def detect_host_operating_system 
    (%x{echo /?} =~ /^\/\?\r?\n$/) ? 'unix' : 'windows' 
end 
+0

これで問題に遭遇する唯一の時間は、基になるプラットフォームにかかわらず "java"と報告すると思われるjRubyを使用することです。 –

+0

私の編集をご覧ください。 +1 Rubyソリューション –

+0

はい!私が思っていたラインに沿って普遍的でなければなりません! –

1

唯一の希望のプラットフォーム上で

ドス存在するコマンドを実行してみてください:cmd

NIX:引数なしでman

一部trival実行の結果状態がここで重要です。

このメソッドでは、文字列の解析は行われません。どちらが最適化されていますか?

0

このスクリプト言語は、ほとんどのLinuxディストリビューションとMacではデフォルトでインストールされています(私はBSDのようなUnixシステムでもそう考えていますが、それについては完全にはわかりません)。

import os 

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

もちろん、好きな場合はOSチェックを追加することもできます。

関連する問題