当在 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
相当于CLICOLOR
此ls
环境变量文档页面如下;粗体强调部分是我所加的:
使用 ANSI 颜色序列区分文件类型。请参阅下面的 LSCOLORS。
除了 -F 选项中提到的文件类型外,还会显示一些额外属性(setuid 位设置等)。颜色取决于具有适当 termcap(5) 功能的终端类型。
默认的“cons25”控制台具有适当的功能,但要在 xterm(1) 中显示颜色,例如,必须将 TERM 变量设置为“xterm-color”。其他终端类型可能需要类似的调整。
除非定义了 CLICOLOR_FORCE 变量,否则如果输出未定向到终端,则会默默禁用着色。
注意你的命令是如何将ls
输出传输到的sed
。由于这不是直接输出到终端,因此该选项被默默禁用。
因此您需要使用CLICOLOR_FORCE
上面描述的ls
环境变量页面如下:
如果输出未定向到终端,则通常会禁用颜色序列。可以通过设置此标志来覆盖此设置。TERM 变量仍然需要引用支持颜色的终端,否则无法确定要使用哪种颜色序列。