はじめに
linuxとかでコマンドを入力する際に常に左にでるアレ。カスタマイズできる。表示する情報や、色が変更できるので自分好みにカスタマイズすればすごく便利。
- Ubuntu 14.04
シェルについて
ユーザーがカーネルとコミュニケーションを図る時、その仲介役として存在するのがシェルだ。シェルは様々な種類があるが、ほとんどのlinuxディストリビューションの標準シェルはbashで、Macも同様である。
bashはPS1
という環境変数がある。これはThe primary prompt string
の略のようだ(bashマニュアルより)。このPS1
を変えれば左に出るアレ、つまりプロンプトを自由にカスタマイズできる。
そもそもディストリビューションごとにばっちりカスタマイズされており、例えばRaspberry PiとUbuntuではプロンプトの表示が異なっていたりする。
bashrcの編集
自分は以下のようにカスタマイズしている。
- 表示は
<user>@<hostname>:<現在のディレクトリ> [<gitブランチ>]$
- カレントディレクトリが
git
プロジェクト内なら現在のブランチが表示される - ディレクトリはフルパスだと長くなるのでディレクトリのみ
- 端末エミューレータ(GUI)の場合、ウィンドウに現在のディレクトリ名を表示
コードは以下の通り
function parse_git_branch {
git branch --no-color 2> /dev/null | sed -e '/^[^*]/d' -e 's/* \(.*\)/ [\1]/'
}
function promps {
# 色は気分で変えたいかもしれないので変す宣言しておく
local BLUE="\[\e[1;34m\]"
local RED="\[\e[1;31m\]"
local GREEN="\[\e[1;32m\]"
local WHITE="\[\e[00m\]"
local GRAY="\[\e[1;37m\]"
case $TERM in
xterm*) TITLEBAR='\[\e]0;\W\007\]';;
*) TITLEBAR="";;
esac
local BASE="\u@\h"
PS1="${TITLEBAR}${GREEN}${BASE}${WHITE}:${BLUE}\W${GREEN}\$(parse_git_branch)${BLUE}\$${WHITE} "
}
promps
(by gist)
一番はgitブランチ名が表示するところだ。いちいちgit status
しなくていいのですごく便利。
ユーザ名(hoge)、ホスト名(hoge-host)として、何も考えずに上記のコードをUbuntuなら~/.bashrc
、Macなら~/.bash_profile
に追記してファイルを読みなおすと以下のようになる。($ . ~/.bashrc
)
なんとなく環境変数を表示して確認してみる
$ echo $PS1
\[\e]0;\W\007\]\[\e[1;32m\]\u@\h\[\e[00m\]:\[\e[1;34m\]\W\[\e[1;32m\]$(parse_git_branch)\[\e[1;34m\]$\[\e[00m\]
コードを読み解く
そのままで十分ならコピペでいいと思う。だが自分好みにカスタマイズしたい場合は、ある程度コードを理解しておく必要がある。まあでも簡単に言うと特殊文字があって、それの組み合わせでカスタマイズできる。色付けの部分が少し見にくいだけで特に難しいことはないと思う。
特殊文字
ここで使っている特殊文字は以下のとおりである。詳細が知りたいのであればman bash
コマンドか公式サイトを是非一読してほしい。
制御特殊文字 | 概要 |
---|---|
\u | ユーザ名 |
\h | ホスト名 |
\W | カレントディレクトリ |
\w | カレントディレクトリ(フルパス) |
$ | '$'という文字(一般ユーザ)。rootユーザの場合は'#'。UIDが0かそうでないか。 |
\e (\033) | ASCIIのエスケープ文字 |
[ | 表示されない文字列の開始、端末制御シーケンスをプロンプトに埋め込む |
] | 表示されない文字列の終了 |
フォント装飾 (ASCII Escape Sequence)
ASCIIエスケープシーケンスを設定すれば色の変更が可能だ。フォントの色や特性、背景色まで変えることができる。例えば青文字表示を開始するのは\[\e[1;34m\]
なのだが、これを分解してみる。
No | 制御特殊文字 | 概要 |
---|---|---|
1 | \[ |
表示されない文字列の開始 |
2 | \e |
ASCIIエスケープシーケンス文字指定 |
3 | [1;34m |
ASCIIエスケープシーケンス設定 |
4 | \] |
表示されない文字列の終了 |
注目すべきは4.ASCIIエスケープシーケンス設定だ。ここを変えれば見た目が変わる。ここのSet Graphics Mode
を参考すれば好きなようにカスタマイズできると思う。以下にそのままコピーしてきた表を追記しておく。
- Text attributes
value | description |
---|---|
0 | All attributes off |
1 | Bold on |
4 | Underscore (on monochrome display adapter only) |
5 | Blink on |
7 | Reverse video on |
8 | Concealed on |
- Foreground colors
value | description |
---|---|
30 | Black |
31 | Red |
32 | Green |
33 | Yellow |
34 | Blue |
35 | Magenta |
36 | Cyan |
37 | White |
- Background colors
value | description |
---|---|
40 | Black |
41 | Red |
42 | Green |
43 | Yellow |
44 | Blue |
45 | Magenta |
46 | Cyan |
47 | White |
上記のサイトによると、\e[<value>;...<value>m
となっている。装飾する番号をいくつも設定して最後にm
。色々実験したが、例えばフォント色がいくつも被った時は最後のフォント色が採用される。(当然かw)
実際に変えてみる
遊びながら確認できるので自分好みにカスタマイズできると思うのだが、、正直迷うよね!!
おしまい
Gitブランチ表示は本当に便利なのでおすすめです。