我正试图做相反的事情
我正在运行一个正在更改其输出格式的应用程序,因为它检测到stdout上的管道,我希望它认为它是一个交互式终端,以便在重定向时获得相同的输出.
我当时认为将它包装在expect脚本中或使用proc_open()PHP中的它会这样做,但事实并非如此.
有什么想法吗?
我使用的各种bash命令 - 花哨的差异,构建脚本等,产生大量的颜色输出.
当我将此输出重定向到一个文件,然后cat或less更高版本的文件时,着色消失-大概B/C重定向剥离出来,告诉终端改变颜色的色码的输出的行为.
有没有办法捕获彩色输出,包括着色?
编辑:
我想建议解析颜色是一个普遍错误的想法.
我想要它的部分原因是我可以解析它并在我自己的脚本输出中传递它.这是......好吧,但是使用瓷器或其他一些东西可能更安全,并自己重新制作彩色部件!
原始答案如下.
我喜欢看颜色,因为我的脚本足够强大(到目前为止)处理颜色代码.看起来我确实反对这里,但老实说,我不知道在脚本中解析转义代码之类的东西是多么重要.如果颜色有助于交互式使用,为什么它们不会帮助我使用脚本,我可能会聚合数据并处理比我手动更多的数据?颜色不是更重要吗?
无论如何,我有一个简洁的小shell脚本我写的munges git status输出,我只是想让这个脚本保持颜色完好无损.我的全局git配置已设置,以便更改和未跟踪文件的列表在git状态中显示为彩色.不幸的git diff是git status,我没有找到强制颜色的选项.
非常清楚,这就是问题所在:
$ git status
Run Code Online (Sandbox Code Playgroud)
产生完美的输出,但(摘自我的脚本如下)
git status | sed "s/^#/\x1b[34m#[0m/"
Run Code Online (Sandbox Code Playgroud)
不产生彩色git status输出,你甚至可以看到我明确地将前导哈希字符转换为蓝色,因为它有助于突出显示我脚本输出的不同区域.
有谁知道如何让它褪色?是否有可以使用的标准程序可以用作"假终端"STDIN/STDOUT管道?我实际上也在研究一个pty伪终端工具,所以我当然可以为此目的使用它,但它是一个相当苛刻的解决方案(并没有准备好使用,因为我还没有完成构建它).