Bash
Mac
Linux
Terminal
ターミナル

【Bash】ターミナルのプロンプトのカスタマイズ方法まとめ

「プロンプト」は、ターミナルで hoge-macbook:~ hoge$ と書かれた行のこと。

今回の記事では以下のことをなるべく簡潔にまとめていきたいと思います。


  • プロンプトの表示内容を変える方法

  • プロンプトの色や書体を変える方法

  • コマンドの出力の後に改行を入れる方法

  • プロンプトでGitブランチを表示する方法

  • よく見るあの表示 ( ■■■▶︎ ) を再現する方法

ここわかんないよ!ここ間違ってるよ!などの意見があれば、ご遠慮なくコメントください。


デフォルトのプロンプト

スクリーンショット 2018-06-20 3.15.55.png

私は見た目が気に入っているHyperというターミナルを使っていますが、中身は同じBashなので、Mac標準のターミナルでも、iTerm2でも変更方法は全く同じです。


試しにプロンプト変えてみる

ターミナルを開いて以下のコマンドを叩いてみる。

$ PS1='Hello Prompt! \# \t \w \$ '

スクリーンショット 2018-06-20 4.01.04.png

これだけで、プロンプトの表示が変えられました〜!👏

ただ、ウィンドウを閉じてまた開くとプロンプトが元に戻ります。


閉じても変更が残るようにする

プロンプトを変更するには、🏠ホームフォルダにある.bash_profileというファイルを編集します。

Macで隠しファイルを表示する設定をしていない人はこちら


.bash_profile

export PS1='Hello Prompt! \# \t \w \$ '


これで保存してターミナルを開くと、プロンプトが変更されたままになります。


表示する内容を変える

スクリーンショット 2018-06-20 3.21.46.png

以下のように記述すると、上のスクリーンショットのような結果がでます。


.bash_profile

export PS1='✌️ \# \t \w \$ '


記号
意味

\h
ホスト名
hamajunnoMacBook-Pro 

\u
ユーザ名
hamajun

\w
ディレクトリ(フルパス)
~/Documents/GitHub

\W
ディレクトリ
GitHub

\t
時間 (24形式)
23:29:38

\T
時間 (12形式)
11:29:38

\@
AM / PM
PM

\d
日付
Wed Jun 20

\D
日時
\D{%y/%m/%d %H:%M:%S}
18/06/20 23:29:38

\#
コマンドの番号 (1, 2, 3...)
1

\n
改行

【備考】デフォルトの表示を敢えて書くとこうなります: \h:\W \u\$

【備考】ちなみに、ホスト名はシステム環境設定 > 共有 で変更できます。


文字の色や書体を変える

「エスケープシーケンス」と呼ばれるものを使って、文字を太字にしたり、色をつけたりできます。


書体

スクリーンショット 2018-06-20 2.54.53.png


.bash_profile

export PS1='装飾なし \[\e[1m\] ここは太字 \[\e[0m\] 装飾なし \$ '


【解説】 \[\]で囲んだところは「エスケープシーケンス」で、文字出力の制御を行う特殊な文字列。\e[ はASCIIのエスケープ文字を使うよという意味で、1mは「太字」、0mは「装飾をリセットする」という意味。

【備考】 \[\]で囲まなくても一応、書体や色を変えることはできますが、↑↓キーを押したときや、画面サイズを変えたときに表示バグが発生しますので、ちゃんと\[\]で囲みましょう。


効果

0m
装飾なし

1m
太字

2m
細字 (未対応)

3m
イタリック体

4m
下線

【備考】 \e[0m\e[m と省略できます。


文字の色

スクリーンショット 2018-06-20 2.56.17.png


.bash_profile

export PS1='装飾なし \[\e[32m\] ここは緑色 \[\e[0m\] 装飾なし \$ '




色のサンプル

30m

#000000

31m

#AA0000

32m

#00AA00

33m

#AAAA00

34m

#0000AA

35m

#AA00AA

36m

#00AAAA

37m

#AAAAAA

【備考】 39mで文字色を、49mで背景色をデフォルトに戻せます。

【備考】 40m〜47mで背景色を指定できます。

【備考】 90m〜97mでもう少し明るい文字色を指定できます。

【備考】 100m〜107mでもう少し明るい背景色を指定できます。

【備考】 色のついた文字を太字にすると色が少し明るくなります。

詳しくはこちらを参照


書体、文字色、背景色の同時指定

スクリーンショット 2018-06-20 2.51.36.png


.bash_profile

export PS1='装飾なし \[\e[1;37;42m\] ここは太字、文字白、背景緑 \[\e[0m\] 装飾なし \$'


これらは ; でつなげることができ、例えば、1;32mと指定すると、「太字、文字色緑」となり、1;30;47mと指定すると、「太字、文字色黒、背景白」となる。


アウトプットの後に改行を入れる

hamajun-mbp:~ hamajun$の上に1行開いているのが確認できますでしょうか。こうすると出力が(かなり)長めのコマンドを叩くときに、アウトプット先頭が見つけやすくなると思います。

スクリーンショット 2018-06-20 3.02.57.png


.bash_profile

# add a blank line after each output

function add_line {
if [[ -z "${PS1_NEWLINE_LOGIN}" ]]; then
PS1_NEWLINE_LOGIN = true
else
printf '\n'
fi
}

PROMPT_COMMAND='add_line'

export PS1='\h:\W \u\$ '


【解説】 ここでは「シェルスクリプト」と呼ばれるものを使います。if文の条件文の-z フラグで文字列の長さが0かどうかを確かめます。PROMPT_COMMAND はプロンプトが表示される度に呼び出されるBashの特殊変数です。これで、1回目のときは改行せずに、2回目以降のときにプロンプトの前に改行を入れます。


Gitブランチを表示

カレントディレクトリがGitレポジトリの場合はブランチ名(master)を表示できます。

スクリーンショット 2018-06-20 3.10.31.png

https://github.com/git/git/blob/master/contrib/completion/git-prompt.sh

.git-prompt.shというファイル名で🏠ホームフォルダに保存する。([Raw]→右クリック保存)

ファイル名の先頭にピリオドを付け忘れずに。


.bash_profile

# show git branch

# https://github.com/git/git/blob/master/contrib/completion/git-prompt.sh
source ~/.git-prompt.sh

export PS1='\h:\W \u \[\e[1;32m $(__git_ps1 "(%s)") \[\e[0m\] \$ '


【解説】 .git-prompt.shは、Git公式が用意したシェルスクリプトで、これを読み込みます。$()はコマンドを呼び出すための記号。__git_ps1は関数で、引数の"(%s)"はフォーマット指定子です。(%s)の場合、(master)<< %s >>の場合、<< master >>となります。


よく見るあの表示 ( ■■■▶︎ ) を再現する方法

スクリーンショット 2018-06-23 18.00.57.png


.bash_profile

# 先に、Menlo-forPowerlineをなどの記号文字を含むフォントをダウンロードして、ターミナルのフォントに指定する必要があります。

export PS1='\[\e[30;47m\] \t \[\e[37;46m\]\[\e[30m\] \W \[\e[36;49m\]\[\e[0m\] '
# (文字黒/背景灰色) 時刻 (文字灰色/背景水色)▶︎(文字黒) ディレクトリ (文字水色/背景色なし)▶︎(装飾なし)


よく目にするこのスタイリッシュな表示、Powerline-Shellという便利なプラグインを入れることでプロンプトがこのような見た目になります。でも、見た目の方は、実は「▶︎」の形をしたフォントだけで作らているんです。

スクリーンショット 2018-06-23 18.37.26.png

Menlo for Powerline.ttf というフォントをインストールして、ターミナルのフォントをこれに指定すれば、こういう表示を簡単に作れます。(Powerline Fonts, Nerd Fontsも使えます。)

Menloはターミナルの標準フォントで、Menlo for Powerlineはこれに特殊な記号文字を追加したフォントセットとなってます。

ターミナルのフォントは、「ターミナル」>「環境設定(⌘,)」>「プロファイル」タブ>「テキスト」タブ>「フォント」で変えられます。iTerm2の場合も同じく、「iTerm2」>「Preferences(⌘,)」>「Profiles」タブ>「Text」タブ>「Font」で変更できます。

スクリーンショット 2018-06-21 0.53.31.png


私のプロンプト

スクリーンショット 2018-06-20 3.25.40.png


.bash_profile

# Gitブランチ名を表示

# https://github.com/git/git/blob/master/contrib/completion/git-prompt.sh
source ~/.git-prompt.sh

# Gitブランチの状況を*+%で表示
GIT_PS1_SHOWDIRTYSTATE=true
GIT_PS1_SHOWUNTRACKEDFILES=true
GIT_PS1_SHOWSTASHSTATE=true
GIT_PS1_SHOWUPSTREAM=auto

# 出力の後に改行を入れる
function add_line {
if [[ -z "${PS1_NEWLINE_LOGIN}" ]]; then
PS1_NEWLINE_LOGIN=true
else
printf '\n'
fi
}
PROMPT_COMMAND='add_line'

# プロンプトで表示する内容
export PS1='\[\e[37;100m\] \# \[\e[90;47m\]\[\e[30;47m\] \W \[\e[37m\]$(__git_ps1 "\[\e[37;102m\] \[\e[30m\] %s \[\e[0;92m\]")\[\e[49m\]\[\e[m\] \$ '

# 先に、Menlo-forPowerlineをなどの記号文字を含むフォントをダウンロードして、ターミナルのフォントに指定する必要があります。



エディターのプロンプトにも反映される

私は、Atomのplatformio-ide-terminalというパッケージを使っていますが、こちらのプロンプトにも反映されていました。これは便利ですね!

スクリーンショット 2018-06-20 3.50.31.png

最後まで見ていただいてありがとうございました。

もし役に立ったのであれば「👍いいね」していただけると嬉しいです。

また、何か間違いがあった場合は、コメントの方をお願いします。


参考

https://www.mm2d.net/main/prog/c/console-02.html

https://stackoverflow.com/questions/14859148/how-to-set-a-conditional-newline-in-ps1

http://motw.mods.jp/shellscript/tutorial.html