gpt4 book ai didi

docker - 为什么在运行 yarn 脚本时我的终端输出与其等效的 bash 脚本不同?

转载 作者:行者123 更新时间:2023-12-05 06:39:00 24 4
gpt4 key购买 nike

**注意:我已按顺序添加更新,请继续阅读,谢谢。 :) **

我对此很好奇——请看我运行的截图:

  • ls -lah build
  • yarn run assets,它运行 ls -lah build

bash_vs_yarn

首先让我说这是 webpack 中的 WIP 构建,所以无需告诉我 31M 的包不是最佳的。 :)

但为什么我使用 native 命令获取颜色和更详细的字体,而不是 yarn 执行命令时?这可能是相关的:这个屏幕截图是: - window 10 - 网络 Storm 终端 - 登录到运行 Ubuntu 14.4 的 docker 容器

谢谢! :)

** 更新:--color=always 恢复颜色 **作为@Charles Duffy建议,在 yarn 脚本中添加 --color=always 保留格式:

color_always

如果有人有一些专业知识可以分享这里发生的事情,我很想听听!谢谢!

最佳答案

简短(大概)回答:到底发生了什么?

以下答案假定 ls 的 GNU 实现。

有几种可能性在起作用:

  • 您的交互式终端的选项可能会被 shell 别名修改。 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 并无论如何着色。


上述含义的背景:

“TTY”实际上是一个终端。它提供专门用于提供用户实际打字的设备的铃声和口哨声(字面意思,用于铃声)。这意味着它具有用于检查和修改光标位置的控制序列,并且 - 与我们的目的相关 - 用于更改呈现输出的颜色。

“FIFO”是一个管道——它将字符从 A 点移动到 B 点,先进先出。在 prog-one | 的情况下prog-two,连接这两者的是一个 FIFO。它只是移动字符,没有光标位置或着色或其他任何概念。

如果 ls 试图在其输出中放置颜色序列,而该输出是针对终端以外的任何目的地,那么这些序列将没有任何意义——事实上,需要打印彩色标记的格式由指定当前事件终端类型的TERM变量确定。

如果您运行 ls --color,那么您就向 ls 保证其输出真的会由终端呈现,或者(至少)以其他方式理解适合当前配置的 TERM 的颜色序列。

关于docker - 为什么在运行 yarn 脚本时我的终端输出与其等效的 bash 脚本不同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45259249/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com