Windows 使WIN10命令行传播WSL颜色

Windows 使WIN10命令行传播WSL颜色,windows,cmd,colors,windows-subsystem-for-linux,wsl-2,Windows,Cmd,Colors,Windows Subsystem For Linux,Wsl 2,每当我打开命令提示符并使用命令序列时 wsl ls 输出的颜色很好 但是,如果我在一个命令中执行相同的操作 wsl ls 输出完全不着色 有什么我错过的场景吗?甚至可以使输出继承WSL颜色吗? 通过使用WSL2和Windows10 build 19041.867以及cmd控制台,ls将其检测为非ANSI彩色终端输出,因此默认情况下禁用彩色输出。在Windows 10上,cmd控制台支持ANSI的颜色序列,因此在这种情况下,您可以强制ls为其输出着色,方法是: wsl ls--color=

每当我打开命令提示符并使用命令序列时

wsl

ls
输出的颜色很好

但是,如果我在一个命令中执行相同的操作

wsl ls
输出完全不着色

有什么我错过的场景吗?甚至可以使输出继承WSL颜色吗?


通过使用WSL2和Windows10 build 19041.867以及cmd控制台,
ls
将其检测为非ANSI彩色终端输出,因此默认情况下禁用彩色输出。在Windows 10上,cmd控制台支持ANSI的颜色序列,因此在这种情况下,您可以强制
ls
为其输出着色,方法是:

wsl ls--color=始终

编辑:另一种方法是为Windows控制台添加包含VT功能的terminfo条目(请参见
tic
toe
terminfo
)。这需要一些研究,但这种方法将为Windows控制台下的每个wsl命令提供彩色输出

WSL terminfo数据库中存在Windows ANSI console的现有条目:

$toe-a | grep窗口
ansi nt Microsoft Windows nt控制台POSIX ansi模式
$infocmp ansi nt
#通过infocmp从文件:/usr/share/terminfo/a/ansi nt重建
ansi nt | psx | U ansi | Microsoft Windows nt控制台POSIX ansi模式,
am、bw、msgr、,
cols#80,it#8,lines#25,
bel=^G,clear=\E[2J,cr=\r,cub1=^H,cud1=\n,cuf1=\E[C,
cup=\E[%i%p1%d;%p2%dH,cuu1=\E[A,ed=\E[J,el=\E[K,
home=\E[H,ht=^I,ind=\E[S,kbs=^H,kcub1=\E[D,kcud1=\E[V,
kcuf1=\E[C,kcuu1=\E[A,nel=\r\E[S,rc=\E[u,rev=\E[7m,
ri=\E[T,rmso=\E[m,sc=\E[s,sgr0=\E[0m,smso=\E[7m,

似乎我们只需要为Windows 10添加颜色8。自从我上次使用
tic
,这么多年以来,我不得不为此进行测试和试用。

谢谢!
--color=always
正是我所缺少的。嗨,Derevin,欢迎使用Stack Overflow。请注意,本网站的主要问题之一是t嘿,关于“特定的编码、算法或语言问题”。你有一个很好的问题,但它可能更适合你。不过,我不得不说,我的系统默认按照你想要的方式工作。我不知道为什么(现在),但如果你想问这个问题,我很乐意跟进更多。