答案 0 :(得分:8)
在Bash命令行中输入以下两个命令:
dircolors -p | sed 's/;42/;01/' > ~/.dircolors
source ~/.bashrc
有一个程序dircolors
用于设置ls
的配置。
默认的~/.bashrc
脚本使用以下行加载配置:
# enable color support of ls and also add handy aliases
if [ -x /usr/bin/dircolors ]; then
test -r ~/.dircolors && eval "$(dircolors -b ~/.dircolors)" || eval "$(dircolors -b)"
因为默认情况下文件~/.dircolors
实际上不存在,所以脚本使用内置的Bash配置(eval "$(dircolors -b)"
)。
要删除o+w
(由w
的{{1}}标记中最后一个'drwxrwxrwx
'标记为'可被他人写'的权限)的绿色背景,则需要创建此背景基于当前(内置)配置的文件。在命令行中键入以下内容:
ls
dircolors -p > ~/.dircolors
打印当前配置,dircolor -p
将输出重定向到给定文件。
现在在编辑器中打开文件并找到以下行:
>
将数字OTHER_WRITABLE 34;42 # dir that is other-writable (o+w) and not sticky
(表示绿色背景)更改为42
(无背景)并保存更改。或者,您可以直接从命令行使用01
程序及其替换功能(sed
语法)来完成此操作:
's/PATTERN/NEW_STRING/'
通过使用管道'sed -i 's/;42/;01/' ~/.dircolors
'的单个命令可以完成2件事:
|
要使更改生效(不重新启动shell),请输入:
dircolors -p | sed 's/;42/;01/' > ~/.dircolors
答案 1 :(得分:5)
要删除所有背景颜色,请将以下内容粘贴到〜/ .bashrc:
中eval "$(dircolors -p | \
sed 's/ 4[0-9];/ 01;/; s/;4[0-9];/;01;/g; s/;4[0-9] /;01 /' | \
dircolors /dev/stdin)"
答案 2 :(得分:2)
dircolors -p
的输出中给出了解释,例如,
当然dircolors
没有为 输出着色。我用过这个脚本:
#!/usr/bin/perl -w
use strict;
our $comment = "\e[31m";
our $reset = "\e[K\e[m";
our @data;
open my $fh, "dircolors -p|" or die "cannot read from dircolors";
@data = <$fh>;
close $fh;
printf "\e[H\e[2J";
for my $n ( 0 .. $#data ) {
chomp $data[$n];
if ( $data[$n] =~ /^\s*#/ ) {
printf "%s%s%s\n", $comment, $data[$n], $reset;
}
elsif ( $data[$n] =~ /^\s*TERM\s/ ) {
printf "%s\n", $data[$n];
}
elsif ( $data[$n] =~ /^\s*[^\s]+\s+\d+(;\d+)?\s*(#.*)?$/ ) {
my $code = $data[$n];
$code =~ s/^\s*[^\s]+\s+//;
$code =~ s/\s.*//;
my $data = $data[$n];
$data =~ s/(#.*)$/$comment$1$reset/;
$data =~ s/^(\s*)([^\s]+)(\s+)/$1\e[${code}m$2\e[m$3/;
printf "%s\n", $data;
}
else {
printf "%s\n", $data[$n];
}
}
1;
要删除后台,您可以更改目录权限,也可以使用其他数据库来设置LS_COLORS
环境变量。 dircolors
documentation是值得去的地方。
答案 3 :(得分:1)
LS_COLORS
是ls
引用的用于为其输出着色的变量。如果未设置LS_COLORS
,则使用幕后的dircolors
生成。也可以使用dircolors
手动设置是否启用/退出(请参见下面的 Vivid )。
如果大多数默认设置都可以使用,而您只想修复少数几个默认设置,最简单的方法就是将它们设置在.bashrc
中。
LS_COLORS=$LS_COLORS:'tw=00;33:ow=01;33:'; export LS_COLORS
这将背景颜色(42
)替换为普通(00
)和粗体(01
)
tw
)的其他可写目录ow
)的可写目录这是最简单的解决方案,因为我们保留其余的默认设置。
另一个答案的技术
# -b is make dircolors generate for bash
# sed replaces the offending background colors
# sed's output is fed as input for another instance of dircolors
# the entire subshell returns LS_COLORS that's `eval`uated
eval $(dircolors -b | sed 's/ 4[0-9];/ 01;/; s/;4[0-9];/;01;/g; s/;4[0-9] /;01 /' | dircolors /dev/stdin)
通过获取所有颜色值并用加粗(4[0-9]
)替换背景(01
)来简单地进行此操作。
还有更好的选择,可以避免所有的手动操作:
wget https://raw.github.com/trapd00r/LS_COLORS/master/LS_COLORS -O $HOME/.config/LS_COLORS
echo 'eval $(dircolors -b "$HOME/.config/dircolors")' >> $HOME/.bashrc
LS_COLORS
export LS_COLORS="$(vivid generate molokai)"
这两种工具的配色方案都不具有任何目录的背景色。