有没有什么方法可以根据符号链接/软链接的链接位置或它们“属于”的人来对它们进行颜色坐标(类似于对输出进行着色ls
)?
举个例子来说明为什么我认为这可能很简洁,我在工作的服务器上有一个帐户,我可以将软件安装到我的主目录中,并对当前路径中的目录进行软链接 - 但我无法链接/usr/local/bin
到例如,因为我不是 sudoer。因此,我可以设想一种情况,我链接的程序最终在 PATH 中具有与集中安装的程序相同的句柄......
希望这个假设的例子能够说明我的意思:假设我将安装的一些程序链接到我已经设置为存在于我的 PATH 中的~/newprogram/
目录。~/Apps/
如果我想调用新程序并且使用自动完成功能来调用,也许管理员已经安装了一个应用程序,它恰好使用相同的符号链接名称(如果可能的话我还没有检查)。当我使用 Tab 键自动完成程序名称的子字符串时,应该会看到所有各种选项 - 假设它看起来像这样:
user@server:~$ newprog #double tab:
newprog newprogram newprogram
因此,存在多个匹配项,其中 2 个匹配项在路径中具有完全相同的快捷方式/程序名称,无论是链接的还是直接的。假设一个是“我的”,另一个来自/usr/local/bin
。
是否可以将每次出现的“newprogram”都着色,以便引用的 newprogram我的符号链接的一个是一种颜色,而“newprogram”的另一个出现是彩色的,以表明它存在于路径中的其他目录中(例如/usr/local/bin/
)?
编辑:
抱歉,是的,忘了提及,这将在该特定服务器的 Ubuntu 上进行。
编辑2:
大部分着色是通过我.bashrc
正在查看的来完成的/usr/bin/dircolors
,但这只会影响我执行的命令(等)的输出ls
,而不影响自动完成的行为。
这就是我目前在 .bashrc 中的内容,我承认它是从某个“向我们展示你的 bashrc”类型的线程中无耻地窃取的。
# uncomment for a colored prompt, if the terminal has the capability; turned
# off by default to not distract the user: the focus in a terminal window
# should be on the output of commands, not on the prompt
force_color_prompt=yes
if [ -n "$force_color_prompt" ]; then
if [ -x /usr/bin/tput ] && tput setaf 1 >&/dev/null; then
# We have color support; assume it's compliant with Ecma-48
# (ISO/IEC-6429). (Lack of such support is extremely rare, and such
# a case would tend to support setf rather than setaf.)
color_prompt=yes
else
color_prompt=
fi
fi
if [ "$color_prompt" = yes ]; then
PS1='${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\$
else
PS1='${debian_chroot:+($debian_chroot)}\u@\h:\w\$ '
fi
unset color_prompt force_color_prompt
# 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)"
alias ls='ls -h --color=auto'
#alias dir='dir --color=auto'
#alias vdir='vdir --color=auto'
alias grep='grep --color=auto'
alias fgrep='fgrep --color=auto'
alias egrep='egrep --color=auto'
fi
编辑3:
raxml 和 prunier 是以前为蓝色的符号链接。
然而,上面的自动完成输出对于任何符号链接都保持未着色(以 tf 为例)
答案1
GNUls
允许您选择按文件类型对文件进行着色或按模式(如果给定类型未着色)进行着色。这是由dircolors
具有内置类型、图案和颜色数据库的程序完成的。 ls
不关心目录路径本身。方面“他们所指的地方”使用该程序并不容易完成。符号链接与常规文件相比很容易。
您可以通过使用以下命令将数据库打印到文件中来最轻松地修改数据库
dircolors -p >myfile
根据系统的不同,您的 shell 启动时可能会查找/etc/DIRCOLORS
)。编辑后,使用dircolors
给 赋值LS_COLORS
:
eval 'dircolors myfile'
配置dir_colors
手册描述了数据库,并提到了您可能想要更改的功能:
LINK
颜色序列
指定用于符号链接的颜色。
或在打印的(默认)数据库中
LINK 01;36 # symbolic link. (If you set this to 'target' instead of a
# numerical value, the color is as for the file pointed to.)
该示例结合了大胆的和青色。您可以通过修改该行来使用不同的颜色组合。 (顺便说一句,dir_colors
手册页提到“明亮”:ISO 6429 说大胆的)。
bash
不用于ls
自动完成,并且ls
着色与bash
.但是,添加了等效功能2014年bash
它使用相同的变量来LS_COLORS
告诉可以显示什么颜色。这是 bash 4.3 的一个特性,如bash手册:
colored-stats
如果设置为“on”,Readline 使用不同的颜色显示可能的完成内容以指示其文件类型。颜色定义取自值LS_COLORS
环境变量。默认为“关闭”。
要使用它,请添加
set colored-stats on
到你的.inputrc
文件。
进一步阅读: