如何确定Ruby脚本的shell执行上下文?

时间:2013-01-24 04:12:50

标签: ruby windows command-line

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

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

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

1 个答案:

答案 0 :(得分: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
相关问题