如何用ls关闭颜色?


50

通常可以从lsgrep等等输出颜色。但是,当您不想要它时(例如,在将结果传递到另一个命令的脚本中),有没有可以将其关闭的开关? 如果它不是默认值,则将其ls -G打开(使用BSD衍生的某些版本ls),但ls +G不会将其关闭。还有别的吗?


4
很晚了,但是对于任何人来说都是这样:对于GNU lsgrep管道,您不需要做任何事情,因为 --color=auto当它的输出是管道时,或者实际上除了tty之外,就已经关闭了着色;这就是“自动”的意思。同样,ls -G如果没有将输出定向到终端,除非... CLICOLOR_FORCE ...,否则禁用FreeBSD 或'CLICOLOR'。
dave_thompson_085 '16

Answers:


69

ls如今,大多数发行版中通常通过别名启用的颜色输出。

$ alias ls
alias ls='ls --color=auto'

您始终可以通过为别名加上反斜杠前缀来暂时禁用它。

$ \ls

进行上述操作会使此调用的别名短路。您可以随时使用它来禁用任何别名。


3
command ls当然也可以使用,但这要快一些。
iconoclast 2014年

整洁的把戏!要更新脚本以使其带有前导``。
越南

1
我喜欢\ ls
Alex Angelico

27

使用GNU ls,您可以指定ls --color=never显式禁用颜色输出。(即使您有alias ls='ls --color=auto',当您运行时ls --color=never,它也会扩展为ls --color=auto --color=never,并且后面的选项优先。)


1
这确实是我一直在寻找的答案,但我会选择slm作为答案,因为它可以处理非GNU ls的情况,例如BSD派生的版本(OS X,Solaris,当然还有* BSD)。
iconoclast

3

您也可以简单地使用(如在DOS上):

dir

它将显示没有颜色的结果,您可以将相同的参数添加到ls,如-l


2
alias ls=ls

要么

unalias ls

这将永久禁用着色。


3
当然,这有点像用a弹枪杀死苍蝇:您丢失了添加到ls别名的所有其他选项,并且在整个会话中丢失了它们,而不仅仅是一个命令。
iconoclast

这就是为什么我说“永久”的原因:-)
Slyx

2

在许多Linux发行版中,默认情况下在用户中启用了此功能.bashrc

编辑~/.bashrc并删除如下所示的行:

alias ls='ls --color=auto'

如果您希望以后禁用此计算机上生成的所有新帐户的此功能,请从以下位置删除同一行:

/etc/skel/.bashrc 

1

在Centos7上,此设置为/etc/profile.d/colorls.sh...该脚本的最后3行是:

alias ll='ls -l --color=auto' 2>/dev/null
alias l.='ls -d .* --color=auto' 2>/dev/null
alias ls='ls --color=auto' 2>/dev/null

如果您有需求和许可,则注释掉不需要的行应该可以解决问题。


或者,unalias ls ll l在你.bashrc,如果你没有权限
avsej

0

关闭颜色: unalias ls

启用颜色:别名ls ='ls --color = auto'

临时禁用颜色: \ ls -ltr


0

可能还有其他情况。ls除非它认为它与交互式内容有关,否则不应使用颜色。当您通过管道传输到另一个程序时,它不应使事物着色。

别名通常是一个坏主意,因为您永远都不会摆脱该选项,并且习惯了一些个人设置,而这些设置可能无法随身携带到您必须使用的其他计算机上。如果您需要关闭它以将其通过管道输送到其他地方,请使用该管道中的开关。但是,管道中不应该有颜色。

对于ls,请查看您是否支持LS_COLORS环境变量。该trapd00r / LS_COLORS告诉您如何谓作品。dircolors使您可以根据文件类型仔细调整颜色。如果您未设置LS_COLORS但已打开颜色,ls则将进行一堆系统调用以找出文件类型和属性,以便确定要为事物着色的颜色。Sherlock背后的人们发现,设置LS_COLORS可以避免所有这些情况,并将速度提高40倍。阅读他们的血腥细节,看看他们发现了什么。

我使所有文件类型都使用默认颜色:

$ export LS_COLORS='bd=0:ca=0:cd=0:di=0:do=0:ex=0:pi=0:fi=0:ln=0:mh=0:no=0:or=0:ow=0:sg=0:su=0:so=0:st=0:tw=0:'

这是我输入到dircolors的LS_COLORS文件:

BLK                   0
CAPABILITY            0
CHR                   0
DIR                   0
DOOR                  0
EXEC                  0
FIFO                  0
FILE                  0
LINK                  0
MULTIHARDLINK         0
NORMAL                0
ORPHAN                0
OTHER_WRITABLE        0
SETGID                0
SETUID                0
SOCK                  0
STICKY                0
STICKY_OTHER_WRITABLE 0

对于grep,请查看您的支持GREP_COLORS还是GREP_OPTIONS


注意,这仍然使GNU ls输出所选颜色的转义序列。比较器的输出ls --color=always | od -a与的ls --color=never | od -a与此设置LS_COLORS
库萨兰达

真正的窍门是ls | od -a不发出转义符,这就是我想要的。的ls时,它的输出发送到一个终端应该只发射的那些序列。如果您告诉它,请确保它将执行此操作。所以,不要那样做。
布赖恩·德·福伊

-1

加上@ brian-d-foy的答案,大多数情况下,您会喜欢一种简单的讨厌的颜色,例如您要更改实例的颜色,例如目录的不可见蓝色或“ OTHER_WRITABLE”的绿色,所以我们使用24位显示:)

export LS_COLORS='di=04;01;38;5;33:ow=04;01;38;5;33;48;2;60;10;0'

重新定义仅目录颜色及其其他可写颜色

04: underline;
01: bold/brighter;
38;5;33: redifined-blue;
48;2;60;10;0: dark red background

了解有关ANSI标准代码的更多信息


1
当前的问题是关于从GNU输出中删除所有颜色ls,而不是如何更改单个颜色。
库萨兰达

OK,怎么样“以关闭一个特定的颜色与‘LS’:出口LS_COLORS =‘嗷嗷= 00’只关闭了OTHER_WRITABLE。
伊基湖
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.