即使使用 --color 选项,tree(1) 颜色也不会被 watch(1) 正确解释

即使使用 --color 选项,tree(1) 颜色也不会被 watch(1) 正确解释

我正在使用一个简单的命令组合来“监视”我的文件系统更改:watch 和 tree。
只是我想要颜色但买不到。

这是我认为应该起作用的:watch --color 'tree -C'哪种起作用,因为它给了我一些颜色,但与它本身不同tree -C

这是一些屏幕截图:
手表--颜色'树-C'输出,应用一些颜色
观看“树-C”输出,显示树确实发送了所有转义码
树-C输出、预期结果

罪魁祸首也可能在我的环境变量中,但如果是我watch 'echo $LS_COLORS',我的conf就在那里。

有任何想法吗? :)

答案1

基本问题是watchtree使用不同的信息来获取颜色:

  • watch程序解释标准 (ECMA-48) 转义序列以指定视频属性。这意味着8颜色,加上粗体、闪烁、下划线、反向和斜体。它使用(n)curses来显示信息,使得结果取决于终端数据库

  • tree程序模仿 GNUls, 使用LS_COLORS环境变量。这使用了TERM环境变量(curses 和大多数其他终端应用程序使用它来标识终端数据库中的条目)来选择一组自定义转义序列,这些序列不一定与终端数据库的描述有任何关系。

通过一些工作,您可以使这些匹配,例如,通过生成合适的LS_COLORS对于给定的终端条目。显然没有人这样做过。并且由于内容LS_COLORS不完整(仅涵盖终端描述的一小部分:没有功能键,没有光标移动,没有通用性),没有必要从LS_COLORS

如果tree使用256种颜色,watch可能不理解这些代码(最近的更改解决了 procps 的部分问题top但尚未适应watch- 稍等片刻)。 watch使用 (n)curses 来管理屏幕,这使得有必要(对于watch)将转义码翻译成curses-calls。

进一步阅读:

相关内容