有没有办法以编程方式确定是否从Windows DOS shell,Linux bash shell等运行Ruby脚本?
我正在尝试在支持它的任何控制台上发出ANSI颜色代码。我使用了术语-ansicolor gem和win32console将ANSI颜色代码转换为本机Windows命令行颜色序列。但是,我发现这个解决方案非常不稳定。
我想仅在支持ANSI的控制台上发出ANSI(请注意,此脚本在Windows和Linux上运行,并带有各种备用第三方shell)。
答案 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