シェル:フォルダがGitリポジトリの場合lsカラー出力の変更

シェル:フォルダが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 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) $

これで、次のようになります。

     SS#1

色を変更するにはどうですかls

これが可能な場合は、Gitリポジトリであることを確認するためにgit statusすべてのディレクトリに対してコマンドを実行する必要があるため、お勧めしません。ls

想像してみましょう:

$ ls somedir
dir1
dir2
dir3
dir4
dir5
dir6
dir7

これにより、git statusどのディレクトリがGitリポジトリであり、どのディレクトリではないかを決定する7つのコマンドが生成され、紫色で表示するかどうかを判断できます。

関連情報