Bash:关闭带有权限错误的闪烁符号链接 (Amazon EC2)

Glo*_*alz 5 bash amazon-ec2 amazon-web-services

我故意创建了指向我可以 sudo 访问的文件的软链接。执行 ls -la 命令时,bash 坚持目标闪烁红色,就好像链接已损坏(我需要 sudo 才能访问)。闪烁的文本是最糟糕的,我不想编辑 /etc/bashrc (Amazon EC2 似乎从 ~/.bashrc 获取此文件)文件,我认为该文件可能正在设置颜色。

关于在不删除/触摸 /etc/bashrc.conf 的情况下删除闪烁的任何想法

小智 6

为什么要这样做?

\n

我同意你的观点,闪烁的红色文本对于有时根本不是错误条件的东西来说是一个非常不合适的默认值,并且很少像其侵入性级别(与几乎所有其他终端输出相比)所暗示的那样严重。

\n

您的情况 \xe2\x80\x94 链接到您并不总是具有对 \xe2\x80\x94 的读取权限的文件就是这样一种非错误情况。我的是另一个:我有指向手机 SD 卡挂载点下各个目录的符号链接;当手机连接时,这些链接很方便,否则无用但无害。我不需要终端因为未安装 SD 卡而在视觉上对我“尖叫”。我已经知道了,终端。没关系。寒意。

\n

应该有人游说改变这种不合理的默认行为。(不会是我;我已经有太多的熨斗在太多的火中。)但令人高兴的是,在您自己的环境中很容易覆盖它。

\n

我怎样才能让它停止?

\n

闪烁由LS_COLORS环境变量中编码的参数指定。

\n

很有可能,您的/etc/bashrc设置是这样的LS_COLORS,但是您可以在自己的环境中覆盖此设置,而无需进行更改/etc/bashrc

\n

您应该首先查看它是如何/etc/bashrc设置的。它可能是通过\xe2\x80\x94 执行此操作的,如果幸运的话,它首先会查找这些设置的文件,然后再返回到默认值。例如,我的系统(未更改)包含以下行LS_COLORSdircolors/etc/bashrc

\n
    if [[ -f ~/.dir_colors ]] ; then\n            eval "$(dircolors -b ~/.dir_colors)"\n    elif [[ -f /etc/DIR_COLORS ]] ; then\n            eval "$(dircolors -b /etc/DIR_COLORS)"\n    else\n            eval "$(dircolors -b)"\n    fi\n
Run Code Online (Sandbox Code Playgroud)\n

这意味着要更改颜色ls用途,我可以编辑(或创建,如果不存在)~/.dir_colors/etc/DIR_COLORS.

\n

碰巧的是,我的系统非常包容,提供了一个好评如潮的/etc/DIR_COLORS. 以下是一些相关行:

\n
# Attribute codes:\n# 00=none 01=bold 04=underscore 05=blink 07=reverse 08=concealed\n# Text color codes:\n# 30=black 31=red 32=green 33=yellow 34=blue 35=magenta 36=cyan 37=white\n# Background color codes:\n# 40=black 41=red 42=green 43=yellow 44=blue 45=magenta 46=cyan 47=white\n...\nORPHAN 01;05;37;41  # symlink to nonexistent file, or non-stat'able file ...\nMISSING 01;05;37;41 # ... and the files they point to\n
Run Code Online (Sandbox Code Playgroud)\n

有了这个,很容易看出,要从损坏的符号链接中删除“闪烁”属性,您需要从和行05中取出。就我个人而言,我还更改了颜色,因为即使是反向视频突出显示的此类文件也远远超过了保证。一旦您知道去哪里寻找,就可以轻松定制口味。ORPHANMISSING

\n

如果这些文件都不存在,不用担心:dircolors有一个-p选项可以输出该文件的默认版本。

\n

如果您/etc/bashrc运行dircolors但不检查任何文件,仅依赖于命令的默认值,您可以通过.bashrc包含类似于上述之一的行(例如eval "$(dircolors -b ~/.dir_colors)".

\n

dircolors最后,如果您的系统根本没有命令,而是/etc/bashrc设置LS_COLORS了某个硬编码值怎么办?虽然比较麻烦,但是你仍然可以直接使用这个环境变量。就像 一样PATH,它是一个以冒号分隔的元素列表 \xe2\x80\x94 ,很难一次性查看所有内容,但如果将冒号更改为换行符,则会更容易:

\n
$ echo $LS_COLORS | tr : \\\\012\n
Run Code Online (Sandbox Code Playgroud)\n

相关值为or(ORPHAN)和mi(MISSING)。在我的系统上,默认情况下这些显示为:

\n
$ echo $LS_COLORS | tr : \\\\012 | egrep '^(or|mi)'\nor=01;05;37;41\nmi=01;05;37;41\n
Run Code Online (Sandbox Code Playgroud)\n

LS_COLORS您可以在 中硬编码您自己的值.bashrc,根据需要调整值(请参阅上面的键),或者您可以使用系统默认值,但使用 修改选择值sed。例如,仅为此类链接设置粗体属性,但删除闪烁和变色:

\n
LS_COLORS=$(echo $LS_COLORS | sed -E 's/:(or|mi)=[^:]+/:\\1=01/g')\n
Run Code Online (Sandbox Code Playgroud)\n

现在运行与上面相同的命令会产生:

\n
$ echo $LS_COLORS | tr : \\\\012 | egrep '^(or|mi)'\nor=01\nmi=01\n
Run Code Online (Sandbox Code Playgroud)\n


fst*_*std 0

假设您指的是 ls(1) 的彩色输出,我认为 ls 默认情况下不会这样做。您可能在 ~/.bashrc 中为其添加别名,因此删除那里的别名(搜索 --color)。