Shell:如果文件夹是 Git 存储库,则更改 ls 颜色输出

Shell:如果文件夹是 Git 存储库,则更改 ls 颜色输出

我的发行版是 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 gitGit 中已包含所有内容,则可以执行命令行补全 + 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) $

现在它看起来像这样:

     SS#1

那么改变 的颜色呢ls

如果这可能是我不鼓励你做的事情,因为你需要git status对每个ls命令中的每个目录运行 a 来确定它是否是 Git 存储库。

想象一下:

$ ls somedir
dir1
dir2
dir3
dir4
dir5
dir6
dir7

会产生 7 个git status命令来确定哪个目录是 Git 存储库,哪个不是,以便您可以决定是否将其着色为紫色。

相关内容