私のディストリビューションは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リポジトリであることを確認するためにgit status
すべてのディレクトリに対してコマンドを実行する必要があるため、お勧めしません。ls
想像してみましょう:
$ ls somedir
dir1
dir2
dir3
dir4
dir5
dir6
dir7
これにより、git status
どのディレクトリがGitリポジトリであり、どのディレクトリではないかを決定する7つのコマンドが生成され、紫色で表示するかどうかを判断できます。