确定运行ruby脚本的终端

时间:2015-09-27 19:09:31

标签: ruby

我正在创建一个使用SGR代码的gem。我发现自己的终端之间存在差异。例如。 \e[2m在Ubuntu的gnome terminal中制作了微弱的文字,但\e[2m在Windows 8.1 Command Prompt With Ruby中没有做任何事情。所以我的ruby程序需要知道它在那里运行的终端,利用(或不使用)某些sgr代码。

是否有一颗神奇的子弹,纯粹的红宝石或希望有宝石,以找出我们正在运行的终端?我的意思是任何终端,无论多么异国情调。我希望能够做到这一点,取决于我们运行我的宝石的终端(这是伪代码,MagicBullet是一个属于宝石的类我希望你能引用我):

MagicBullet.identify #=> ['gnome-terminal', '6.3.2']

或者:

MagicBullet.identify #=> ['konsole', '4.5']

或者:

MagicBullet.identify #=> ['command-prompt', '13.37']

或者:

MagicBullet.identify #=> ['NeWT', '15.2']

terminal info window

有没有一种可靠的方法可以找到无论操作系统......这些信息感觉很容易获得......也许是一个宝石,它寻找属于已知终端列表的一系列OS信号/进程,类似的东西。我已尝试ENV['TERM'],虽然在gnome-terminal中返回:xterm,但我更倾向于返回:gnome-terminal。在Command Prompt With Ruby中,它返回nil,考虑到所有非Linux(我认为)终端将返回nil,这不是很有用。当然,我可以运行if !ENV['TERM'],然后使用一组不同的逻辑来查找终端的名称,但这并不会让我觉得“肯定会”。它可能会与其他“异国情调”终端失败。

所以我想作为答案:

  • 一种宝石,可以确定哪种终端以及我们正在运行的版本
  • 一种纯粹的红宝石方式,可以确定哪种终端以及我们正在运行的版本
  • 一种算法让我能够很好地识别出我们正在运行的终端和版本,我正在谈论各种Linux,Sun Microsystems的东西,Apple的操作系统(终端和第三方iTerm是两个)例如Apple的操作系统的终端)。任何可以安装MRI的东西。

0 个答案:

没有答案