2

有没有办法以编程方式确定是否正在从 Windows DOS shell、Linux bash shell 等运行 Ruby 脚本?

我正在尝试在任何支持它的控制台上发出 ANSI 颜色代码。我使用术语 ansicolor gem 和 win32console 将 ANSI 颜色代码转换为原生 Windows 命令行颜色序列。但是,我发现这个解决方案非常不稳定。

我只想在支持 ANSI 的控制台上发出 ANSI(请注意,此脚本在 Windows 和 Linux 上运行,带有各种备用第三方 shell)。

4

1 回答 1

1

您可以使用父进程 ID 来确定它从哪里开始。Process您可以使用模块获取父进程 ID 。但是请注意Process.ppid上的此警告(在 Win32/64 上返回不可信的值。),您需要彻底测试此解决方案。获得父进程 ID 后,您可以在win32_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 回答