2

RubyスクリプトがWindows DOSシェル、Linux bashシェルなどから実行されているかどうかをプログラムで判断する方法はありますか?

ANSI カラー コードをサポートするすべてのコンソールで出力しようとしています。term-ansicolor gem を win32console と共に使用して、ANSI カラー コードをネイティブの Windows コマンド ライン カラー シーケンスに変換しました。ただし、このソリューションは非常に不安定であることがわかりました。

ANSI 対応のコンソールでのみ ANSI を発行したい (このスクリプトは、さまざまな代替サードパーティ シェルを使用して Windows および Linux で実行されることに注意してください)。

4

1 に答える 1

1

親プロセス ID を使用して、開始元を特定できます。Processモジュールを使用して親プロセス ID を取得できます。ただし、 Process.ppidに関するこの警告 (Win32/64 では信頼できない値を返します) に注意してください。この解決策を徹底的にテストする必要があります。親プロセスIDwin32_processを取得したら、テーブルでルックアップを実行してプロセスの名前を取得し、そのcmd.exe. 以下サンプルコード。

require 'win32ole'

wmi = WIN32OLE.connect("winmgmts://")
processes = wmi.ExecQuery("select * from win32_process where ProcessId = #{Process.ppid}")

processes.each do |process|
    if process.Name == "cmd.exe"
        puts "started from command prompt. Do something"
    else
        puts "started from elsewhere. Do something else"
    end     
end
于 2013-01-24T09:06:14.203 に答える