Answers:
在macOS上,ls
它不是GNU ls
,并且不接受--color=always
Linux用户可能期望使用此功能的选项。
在macOS版本中ls
,颜色由两个变量控制:$CLICOLOR
和$CLICOLOR_FORCE
。如果定义了前者,则由指定的终端$TERM
支持颜色,并且输出到终端,则该输出将被着色,就像GNU的--color=auto
选项一样。如果还定义了后一个变量,则将删除最终条件,其行为类似于GNU的--color=always
。
因此,要使颜色传递到sed
,您将需要以下内容:
CLICOLOR_FORCE=1 ls -la | sed -En '/Desktop/q;p'
-G
等效于定义$CLICOLOR
(因此不足)
我会盲目猜测您的发行版与许多发行版一样,都有一个别名映射ls
到ls --color=auto
。ls -la --color=always | sed …
应该管用。
(从auto
广义上讲,该设置ls
检查输出是否显示在显示器上,并且仅检查显示器的颜色。其原因是,颜色是由转义序列(即不可见的命令字符)实现的,因此程序可能会使它们混淆对于文件名的一部分,诸如此类。)
ls
的确也可以-G
选择启用颜色,但是我不确定它在管道中的行为。