将“ls -G1”的输出通过管道传输到“sed”,同时保留 macOS 中的输出颜色

将“ls -G1”的输出通过管道传输到“sed”,同时保留 macOS 中的输出颜色

当在 macOS 中使用终端时,我创建了一个别名,它允许我在一列中列出文件夹和文件,并使用如下选项~/.bash_profile使用颜色:-G1

something = "ls -G1"

这个效果很好,但我想添加额外的空格(缩进),以便输出如下内容:

Folder 1
Folfer 2
Folder 3

变成:

<space>Folder 1
<space>Folder 2
<space>Folder 3

如果我添加并写下以下内容,这将是可能的sed 's/^/ /'

something = "ls -G1 | sed 's/^/   /'"

但是如果我添加sed,无论我做什么,我都会失去输出颜色。

有没有办法在ls输出中添加缩进并保留原始输出颜色?

答案1

正如这个答案中所述Unix 和 Linux Stack Exchange,您需要在该命令前加上前缀,CLICOLOR_FORCE=1如下所示:

CLICOLOR_FORCE=1 ls -G1 | sed 's/^/   /'

因此你的别名就变成:

something = "CLICOLOR_FORCE=1 ls -G1 | sed 's/^/   /'"

ls您的命令的问题在于,它-G相当于CLICOLORls环境变量文档页面如下;粗体强调部分是我所加的:

使用 ANSI 颜色序列区分文件类型。请参阅下面的 LSCOLORS。

除了 -F 选项中提到的文件类型外,还会显示一些额外属性(setuid 位设置等)。颜色取决于具有适当 termcap(5) 功能的终端类型。

默认的“cons25”控制台具有适当的功能,但要在 xterm(1) 中显示颜色,例如,必须将 TERM 变量设置为“xterm-color”。其他终端类型可能需要类似的调整。

除非定义了 CLICOLOR_FORCE 变量,否则如果输出未定向到终端,则会默默禁用着色。

注意你的命令是如何将ls输出传输到的sed。由于这不是直接输出到终端,因此该选项被默默禁用。

因此您需要使用CLICOLOR_FORCE上面描述的ls环境变量页面如下:

如果输出未定向到终端,则通常会禁用颜色序列。可以通过设置此标志来覆盖此设置。TERM 变量仍然需要引用支持颜色的终端,否则无法确定要使用哪种颜色序列。

相关内容