我的发行版是 RHEL,所以我有一个 DIR_COLORS 文件夹和一个 LS_COLORS 变量。我知道如何修改颜色。我还知道如何检查文件夹是否是 git 存储库。我不知道的是,如果该文件夹是存储库,如何让 ls 更改目录的颜色(默认为蓝色,存储库文件夹将是紫色或其他)。
这是我对错误 sudo 代码的尝试
for d in ls
if git_repo($d)
LS_COLORS = git_colors
else
LS_COLORS = normal
print ls[$d]
我知道这可能没有“法律”意义,但希望您能明白要点。我知道我可以通过在单列中回显它并手动更改文本颜色(理论上)来手动完成此操作,但我希望它看起来像具有多列的普通 ls 。
如果有更好的办法我会采纳。我还想将其放入我的 bashrc 中的一个函数中,这样我就可以为该函数添加 ls 别名
答案1
Git 提示
我建议您使用开箱即用的 Git 项目提供的内容,而不是在这里自行部署。
在 CentOS 7.x 机器上,如果yum install git
Git 中已包含所有内容,则可以执行命令行补全 + git 提示符。
$ rpm -ql git|grep completion
/etc/bash_completion.d
/etc/bash_completion.d/git
/usr/share/doc/git-1.8.3.1/contrib/completion
/usr/share/doc/git-1.8.3.1/contrib/completion/git-completion.bash
/usr/share/doc/git-1.8.3.1/contrib/completion/git-completion.tcsh
/usr/share/doc/git-1.8.3.1/contrib/completion/git-completion.zsh
/usr/share/doc/git-1.8.3.1/contrib/completion/git-prompt.sh
/usr/share/git-core/contrib/completion
/usr/share/git-core/contrib/completion/git-completion.tcsh
/usr/share/git-core/contrib/completion/git-prompt.sh
以下是手动执行此操作的步骤,需要将它们添加到您的帐户中~/.bash_profile
才能使其永久生效。
$ . /usr/share/git-core/contrib/completion/git-prompt.sh
$ mkdir somedir && cd somedir
$ git init
$ PS1="$GREEN\t$RED-$BLUE\u$YELLOW\w\[\033[m\]$MAGENTA\$(__git_ps1)$WHITE \$ "
执行上述操作将设置您的提示,使其从以下位置开始:
[root@centos7 somedir]#
-to-
13:18:42-root/home/vagrant/somedir (master) $
笔记:它现在在我的提示中显示我当前在此存储库中所在的分支。
颜色在哪里?
要获得这种颜色,您需要定义颜色,以便PS1
提示颜色变量的变量具有相应颜色的转义码:
RED="\[\033[0;31m\]"
YELLOW="\[\033[0;33m\]"
GREEN="\[\033[0;32m\]"
BLUE="\[\033[0;34m\]"
MAGENTA="\[\033[0;35m\]"
WHITE="\[\033[0;37m\]"
现在重新设置PS1
以获取这些:
13:24:26-root/home/vagrant/somedir (master) $ PS1="$GREEN\t$RED-$BLUE\u$YELLOW\w\[\033[m\]$MAGENTA\$(__git_ps1)$WHITE \$ "
13:24:35-root/home/vagrant/somedir (master) $
现在它看起来像这样:
那么改变 的颜色呢ls
?
如果这可能是我不鼓励你做的事情,因为你需要git status
对每个ls
命令中的每个目录运行 a 来确定它是否是 Git 存储库。
想象一下:
$ ls somedir
dir1
dir2
dir3
dir4
dir5
dir6
dir7
会产生 7 个git status
命令来确定哪个目录是 Git 存储库,哪个不是,以便您可以决定是否将其着色为紫色。