Help us understand the problem. What is going on with this article?

ターミナルプロンプトの表示・色の変更

「プロンプト」は、ターミナルで 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

これだけで、プロンプトの表示が変えられました〜!👏
ただ、ウィンドウを閉じてまた開くとプロンプトが元に戻ります。

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

プロンプトを変更するには、🏠ホームフォルダ (~) にある.bashrc というファイルを編集します。
自分のユーザだけではなく、全ユーザの設定を変更したい場合は /etc/bashrc を編集します。

:warning: MacOS Catalina (2019/10) 以上の方など、Bashではなく、Zshをお使いの場合は、.bashrc ではなく .zshrc を編集します。

Mac の Finder で隠しファイルの表示を切り替えるには ⌘command + shift + .(ドット) を押します。
存在ない場合は、新規作成します。( $ touch ~/.bashrc )

~/.bashrc
export PS1='Hello Prompt! \# \t \w \$ '

これで保存して、ターミナルを閉じて開き直すと、プロンプトが変更されたままになります。
( $ source ~/.bashrc 、もしくは、 $ source ~/.zshrc を実行することで反映することもできます。)

表示する内容を変える

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

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

~/.bashrc
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 改行
\\$ 一般ユーザーの時 $、rootの時 # を表示 $

【備考】デフォルトの表示を敢えて書くとこうなります: \h:\W \u\$
【備考】ちなみに、ホスト名はシステム環境設定 > 共有 で変更できます。

文字の色や書体を変える

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

書体

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

~/.bashrc
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

~/.bashrc
export PS1='装飾なし \[\e[32m\] ここは緑色 \[\e[0m\] 装飾なし \$ '
文字色 背景色
30m 40m 背景黒
31m 41m 背景赤
32m 42m 背景緑
33m 43m 背景黄
34m 44m 背景青
35m 45m 背景紫
36m 46m 背景水
37m 47m 背景灰

【備考】 39mで文字色を、49mで背景色をデフォルトに戻せます。
【備考】 90m〜97mでもう少し明るい文字色を指定できます。
【備考】 100m〜107mでもう少し明るい背景色を指定できます。
【備考】 色のついた文字を太字にすると色が少し明るくなります。

詳しくはこちらを参照

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

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

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

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

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

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

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

~/.bashrc
# 出力の後に改行を入れる
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]→右クリック保存)
ファイル名の先頭にピリオドを付け忘れずに。

~/.bashrc
# 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

~/.bashrc
# 先に、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

「▶︎」の形をした記号文字はこちら →
※ 通常は四角形とか、四角形で囲った?として表示されます。

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

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

スクリーンショット 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

hmmrjn
社会人1年目でWebエンジニアやってます。
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away