Bashのプロンプトをカスタマイズする
やりたいこと
カレントディレクトリと時刻とgitのブランチとgcloudに設定されているプロジェクトを表示したいです
そもそもどこで設定されている?
環境変数のPS1に設定されています
echo $PS1 ${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\$
意味がわからない
カスタマイズする前に、現状を把握しておきたいが意味がわからないです
Bash/プロンプトのカスタマイズ - ArchWiki を参考に読んで見ましょう
debian_chroot ???
${debian_chroot:+($debian_chroot)}
早速謎の debian_chroot なるなにかが現れました
Ubuntuのデフォルト設定から学ぶbashプロンプト - Qiita にある通り chroot でルートディレクトリを変えている場合にそれを表示してくれるらしいです
普段 chroot を使うことがないのでこの部分はとりあえず無視しておきます
ユーザー名@ホスト名
\[\033[01;32m\]\u@\h
\[ と \] はエスケープに使われる記号で、この間に書かれた文字は文字数をカウントしないとかそんな感じみたいです
\033[01;32m
\033 は \e と書いてもいいみたいです \033[ と m の間に書体や文字色等の設定ができるみたいです 複数同時に指定したい場合は ; で区切るようです
コード | 意味 |
---|---|
00 | 装飾なし |
01 | 太字 |
02 | 細字 |
03 | イタリック |
04 | 下線 |
30 | 文字色 黒 |
31 | 文字色 赤 |
32 | 文字色 緑 |
33 | 文字色 黄色 |
34 | 文字色 青 |
35 | 文字色 マゼンタ |
36 | 文字色 シアン |
37 | 文字色 白 |
40 | 背景色 黒 |
41 | 背景色 赤 |
42 | 背景色 緑 |
43 | 背景色 黄色 |
44 | 背景色 青 |
45 | 背景色 マゼンタ |
46 | 背景色 シアン |
47 | 背景色 白 |
なので、 [\033[01;32m]\ は ここからは 太字 かつ 文字色 緑 で表示します という意味になるようです
\u はユーザー名, @はただの文字列で \h がホスト名になります
コロン
\[\033[00m\]:
装飾をすべてなしにして : を表示します
カレントディレクトリ
\[\033[01;34m\]\w
\w はカレントディレクトリ(フルパス) さきほどの表によると、01は太字、34は文字色 青 です
$
\[\033[00m\]\$
再度装飾をすべてなしにしています \$ は一般ユーザーのときは $, root のときは # を表示してくれるようです
読めたね!
ここからはやりたいことを実現していきます
日時を表示
\D を使えば良いみたいです
\D{%Y/%m/%d %T}
ちょっと表示してみましょう
export PS1="[\D{%Y/%m/%d %T}]${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\$ "
日付が表示できましたね!!
git ブランチ
プロンプトをカスタマイズしてgitブランチを表示する - Qiita を参考に、以下でブランチ名が取得できるようです
git branch --no-color 2> /dev/null | sed -e '/^[^*]/d' -e 's/* \(.*\)/\1/'
ということでこれを.bashrcに記載していきましょう
function branch () { git branch --no-color 2> /dev/null | sed -e '/^[^*]/d' -e 's/* \(.*\)/\1/' } if [ "$color_prompt" = yes ]; then PS1='$(branch)${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\$ ' else PS1='$(branch)${debian_chroot:+($debian_chroot)}\u@\h:\w\$ ' fi
表示できた!!
gcloud のプロジェクト名
zsh-gcloud-prompt/gcloud.zsh at master · ocadaruma/zsh-gcloud-prompt · GitHub を参考に、以下でプロジェクト名が取得できます
gcloud config get-value project 2>/dev/null
ということでこれも.bashrcに記載します
YES!!
レイアウト
欲しい情報は一通り取得できましたが、プロンプトが長くなりすぎて使いにくそうです 2行に分けたり右端に置いたりして整理しましょう
改行
\n でいけるみたいです
右寄せ
ややこしいんですが
Bash/プロンプトのカスタマイズ - ArchWiki を参考にしたらできました
まとめ
意外とできましたね
.bashrc の関連しそうな部分は最終的に下記のような形になりました
function branch () { git branch --no-color 2> /dev/null | sed -e '/^[^*]/d' -e 's/* \(.*\)/\1/' } function project () { gcloud config get-value project 2>/dev/null } function right () { printf "%*s" $COLUMNS "$(branch) $(project) " } if [ "$color_prompt" = yes ]; then PS1='\[$(tput sc; right; tput rc)\]${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\n\D{%Y/%m/%d %T}\[\033[00m\] \$ ' else PS1='${debian_chroot:+($debian_chroot)}\u@\h:\w\$ ' fi unset color_prompt force_color_prompt