我正在尝试使用OS X应用程序GeekTool将彩色文本输出打印到我的桌面上。GeekTool允许你把叫做“geeklet”的小窗口放到桌面上。一种Geeklet显示shell命令的输出。
我想要的输出应该来自我正在使用ruby脚本解析的文本文件。我正在使用Ruby gem colorize在ruby中的字符串周围添加ANSI转义序列。我的目标是将这些字符串输出到Geektool并显示彩色文本。
当我在终端(终端和iTerm2,同时使用zsh和bash)中运行Ruby脚本时,输出的颜色非常好。但是当我在GeekTool中运行这个脚本时,它不是--转义序列没有显示在输出中,但是没有颜色。我知道GeekTool支持ANSI转义序列,因为当我运行这个外壳命令时:
printf "\e[0;35;49mabcd\e[0m"我得到了彩色的GeekTool输出。echo $SHELL还告诉我,GeekTool使用的是我通常使用的同一个zsh可执行文件。但是由于某些原因,我的ruby脚本不能打印彩色输出。相反,我看到的是单色输出,但去掉了转义序列。
我的脚本使用Ruby的puts输出包含转义序列的字符串。我试着切换到p。当在终端中运行时,这会产生非彩色输出,转义序列保持不变。在GeekTool中运行时,我也得到了非彩色输出,但是转义序列再次消失了。
有人知道我的转义序列到哪里去了吗?
发布于 2012-08-17 12:47:55
我找到了解决此问题的方法。我需要删除彩色宝石和“双重转义”的转义序列。我使用如下所示的字符串对字符串进行包装,从而为字符串着色:
"\\e[0;36;49m" # example color
"\\e[0m" # clear在构建了一个包含许多转义序列的大型字符串之后,我做到了
command = "printf \"#{mystring}\n\"" # The trailing \n is needed to prevent Geektool from displaying [m at the end for some reason
exec(command)这就起到了作用。在输出到Geektool时,字符串似乎被处理了两次。转义\\e前面的双反斜杠是为了防止它们在第一次传递时被消耗。
https://stackoverflow.com/questions/11995111
复制相似问题