**注意:我已按顺序添加更新,只需继续阅读,谢谢。 :) **
我对此非常好奇 - 请看我运行的截图:
ls -lah build
和yarn run assets
,运行ls -lah build
。首先我要说这是webpack中的WIP构建,所以不需要告诉我31M捆绑不是最优的。 :)
但是为什么我使用native命令获取颜色和更详细的字体,而不是yarn
执行命令时?它可能是相关的:这个屏幕截图是:
- Windows 10
- Webstorm终端
- 登录到运行Ubuntu 14.4的docker容器
谢谢! :)
**更新: - color =始终恢复颜色**
如@Charles Duffy建议的那样,在纱线脚本中添加--color=always
会保留格式:
如果有人有一些专业知识来分享这里发生的事情,我会在市场上听到它!谢谢!
答案 0 :(得分:1)
以下答案假设ls
的GNU实现。
有几种可能性:
type ls
的输出将表明这是否属实。ls --color=auto
;无论如何,这会检查它是否直接写入TTY,如果是,则仅启用颜色。如果输出不直接指向TTY(例如,如果yarn
在打印之前输出了输出),则ls --color=auto
将不会着色
要解决此问题,您可以明确传递ls --color=always
或其等效内容,只需ls --color
。这包括两种情况:如果您使用的别名代表您传递--color=auto
,则明确传递它意味着您不再需要别名。相比之下,如果yarn
正在捕获内容而不是直接将其传递给TTY,那么--color=always
会告诉ls
忽略isatty()
无论如何都会返回false并着色。
A" TTY"实际上是一个终端。它提供了铃声和口哨声(字面意思,用于铃声),专门用于提供用户实际键入的设备。这意味着它具有用于检查和修改光标位置的控制序列,并且 - 用于我们的目的 - 用于更改用于呈现输出的颜色。
A" FIFO"是一个管道 - 它将字符从A点移动到B点,先进先出。在prog-one | prog-two
的情况下,连接这两者的是FIFO。它只是移动字符,没有光标位置或颜色或其他任何概念。
如果ls
尝试将颜色序列放在其输出中,当该输出用于终端以外的任何目的地时,那些序列将没有任何意义 - 实际上,非常格式需要打印着色标记由TERM
变量确定,该变量指定当前活动的终端类型。
如果您运行ls --color
,那么,您承诺ls
其输出确实将由终端呈现,或者(至少)否则了解适合当前配置的TERM
的颜色序列。