Shell: modification de la sortie couleur de ls si le dossier est un dépôt Git

1

Ma distribution est RHEL. J'ai donc un dossier DIR_COLORS et une variable LS_COLORS. Je sais comment modifier les couleurs. Je sais aussi comment vérifier si un dossier est un dépôt Git. Ce que je ne sais pas, c'est comment faire en sorte que ls change la couleur du répertoire si ce dossier est un référentiel (le paramètre par défaut est bleu, le dossier du référentiel serait violet ou quelque chose du genre).

Voici ma tentative de mauvais code sudo

for d in ls
    if git_repo($d)
        LS_COLORS = git_colors
    else
        LS_COLORS = normal
    print ls[$d]

Je sais que cela n'a probablement pas de sens "juridique", mais j'espère que vous comprenez l'essentiel. Je sais que je peux le faire manuellement en le répercutant dans une seule colonne et en modifiant manuellement la couleur du texte (en théorie), mais je veux que cela ressemble à un ls normal avec plusieurs colonnes.

S'il y a une meilleure façon, je vais le prendre. Je veux aussi jeter cela dans mon bashrc dans une fonction afin que je puisse alias ls à cette fonction

    
posée Excal 13.07.2018 - 16:58
la source

1 réponse

1

invites Git

Plutôt que de rouler le vôtre ici, je vous recommanderais d'utiliser ce qui est fourni par le projet Git hors de la boîte.

Sur une boîte CentOS 7.x, si yum install git est déjà inclus dans Git, vous devez exécuter la ligne de commande et l'invite 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

Voici les étapes à suivre pour le faire manuellement. Il vous faudrait ajouter votre ~/.bash_profile pour les rendre permanents.

$ . /usr/share/git-core/contrib/completion/git-prompt.sh
$ mkdir somedir && cd somedir
$ git init
$ PS1="$GREEN\t$RED-$BLUE\u$YELLOW\w\[3[m\]$MAGENTA\$(__git_ps1)$WHITE \$ "

Faire ce qui précède va configurer votre invite de sorte qu'elle se déroule comme suit:

[[email protected] somedir]#

-to-

13:18:42-root/home/vagrant/somedir (master) $

REMARQUE: , la invite sur laquelle je me trouve actuellement dans ce référentiel s'affiche désormais dans mon invite.

Où sont les couleurs?

Pour obtenir cette couleur, vous devez définir les couleurs de sorte que la variable PS1 des variables de couleur de l'invite ait les codes d'échappement correspondants pour leurs couleurs respectives:

RED="\[3[0;31m\]"
YELLOW="\[3[0;33m\]"
GREEN="\[3[0;32m\]"
BLUE="\[3[0;34m\]"
MAGENTA="\[3[0;35m\]"
WHITE="\[3[0;37m\]"

Maintenant, réinitialisez PS1 pour les récupérer:

13:24:26-root/home/vagrant/somedir (master) $ PS1="$GREEN\t$RED-$BLUE\u$YELLOW\w\[3[m\]$MAGENTA\$(__git_ps1)$WHITE \$ "
13:24:35-root/home/vagrant/somedir (master) $

Et ça va ressembler à ça maintenant:

Et que dire du changement de couleur de ls ?

Si c'est probablement quelque chose que je découragerais de votre part parce que vous devez ensuite exécuter un git status sur chaque répertoire de chaque commande ls afin de déterminer s'il s'agit ou non d'un dépôt Git.

Imaginez ceci:

$ ls somedir
dir1
dir2
dir3
dir4
dir5
dir6
dir7

donnerait 7 git status commandes pour déterminer quel répertoire serait un référentiel Git et quel ne serait pas, de sorte que vous puissiez décider de le colorer en violet ou non.

    
réponse donnée 13.07.2018 - 19:25
la source

Lire d'autres questions sur les étiquettes