3

rubyファイル(または任意のrake機能)を使用して、スクリプトを実行するユーザーが特定のシェルコマンドを実行できるかどうかを確認する必要があります。特にg++など。うまくいけばシステムに依存しないので、g ++。bat、g ++。exe、または単にg ++(など)がある場合でも、パス上にあり、ユーザーシステムで実行可能である限り、yesと言う必要があります。

例:ユーザーがファイルの拡張機能なしの実行可能バージョンとファイルの.cmdバージョンを持っている場合、Linuxシステムでは拡張機能なしのバージョンでは「yes」、Windowsでは.cmdバージョンでは「yes」と表示されます。システム。ユーザーシェルはそのバージョンのファイルしか実行できないためです。

これの目的は、スクリプトを(可能な限り)自己構成できるようにすることです。

私がこれを行う方法について何か提案はありますか?

4

3 に答える 3

5

手っ取り早い方法は、systemコマンドを介してg ++を実行し、戻りコードを確認することです。次に例を示します。

def gpp_exists
  return system("g++ --version")
end

コンソールに不要な出力が表示されないようにするために、いくつかのトリックを実行する必要があります(たとえば、正しいOS構文に基づいてstdout / stderrをリダイレクトする)が、それほど悪くはありません。

于 2010-06-03T22:00:55.050 に答える
4

まあ、とのFile両方が含まれています。 実行可能ファイルが存在するディレクトリを取得します(少なくとも* nixでは-誰かがWindowsを確認できますか?)。2つを少しの魔法で組み合わせると、解決策が得られるはずです。exists?executable?ENV['PATH']

編集:

irb(main):001:0> ENV['PATH'].split(':').collect {|d| Dir.entries d if Dir.exists? d}.flatten.include? 'adduser'
=> true
irb(main):002:0> ENV['PATH'].split(':').collect {|d| Dir.entries d if Dir.exists? d}.flatten.include? 'foo'
=> false
于 2010-06-03T21:57:28.490 に答える
1

似たようなもの(パスで実行可能ファイル)が必要で、システムコマンドを使用しましたが、returnのエラーコードを確認してください。これによると、UNIXの標準的な結果(127 =ファイルが見つかりません)stackoverflow標準のUNIXリターンコード

    def checkinstalled(program)
      stdop=system(program)
      result=$?
      exit_code=result.exitstatus 
      return !exit_code.eql?(127)
    end

ただし、Windowsについては言えません

于 2015-01-15T08:39:55.843 に答える