はじめに
最近,Macbook Proを購入して色々とセッティングをしています.その過程で,terminal環境をカッコよくしようと思って,Promptを自分好みに変更しました.
本記事では,Macでのプロンプトの設定とその際に直面した”折り返しがおかしい”という問題の解決策も紹介していきます.
並行して使っているUbuntuでも同じ問題が発生し,この方法での解決を確認しました.
TL;DR
最終的には以下のようになりました.結果だけ欲しい方はそのままコピーすると良いと思います.
GREEN="\[\e[1;32m\]"
PURPLE="\[\e[1;34m\]"
COLOR_RESET="\[\e[0m\]"
export PS1="${GREEN}\u ${PURPLE}\w ${GREEN}$ ${COLOR_RESET}"
Macで~/.bashrc
が読み込まれない場合
Macでの初期状態のプロンプトは/private/etc/bashrc
に記述されています.PS1の書き方は下で紹介します.
これは,~/.bash_profile
に記述すると紹介されているサイトがあったのですが,できなかったため~/.bashrc
に記述しました.
ちなみに,Macでは初期設定では~/.bashrc
を読み込まないようになっているらしく,~/.bash_profile
を以下のように作成する必要があります.
if [ -f ~/.bashrc ]; then
. ~/.bashrc
fi
PS1の書き方
プロンプトの設定の基本は先ほど記述した
export PS1=""
ですが,書ける文字は決まった文字だけでなく,ユーザ名
やパス
,時刻
などもあります.
それらを表示するためにはエスケープシーケンス(?)を使う必要があります.使用できる文字は以下のものがあります.
Macでバックスラッシュを入力するのは,Option + ¥
です.
|文字|表示されるもの|
|---|---|---
|\u|ユーザ名|
|\w|カレントディレクトリのパス|
|\W|カレントディレクトリ名|
|\d|日付|
|\D|時間|
|\h|ホスト名(ドメインなし)|
|\H|ホスト名|
|\j|起動しているジョブ数|
|\I|仮想端末の番号|
|\n|改行(LF)|
|\r|改行(RL)|
|\s|シェル名|
|\t|時刻(12時間表示)|
|\T|時刻(24時間表示)|
|\@|時刻(12時間表示)|
|\A|時刻(24時間表示)|
|\v|bashのバージョン|
|\V|bashのバージョン|
|\!|history上のコマンド番号|
|\#|コマンド番号|
|\$|rootでは#
,userでは$
|
|\nnn|8進数表示|
|\\|\
|
|\[|ターミナル操作のシーケンス文字列の開始|
|\]|ターミナル操作のシーケンス文字列の終了|
私は
[username] [path] $ [command]
というプロンプトにしたかったため,~/.bashrc
には以下のように記述しました.(上のものと同じ)
GREEN="\[\e[1;32m\]"
PURPLE="\[\e[1;34m\]"
COLOR_RESET="\[\e[0m\]"
export PS1="${GREEN}\u ${PURPLE}\w ${GREEN}$ ${COLOR_RESET}"
長いコマンドを入力する時の折り返しがおかしい!!
これが一番苦戦したのですが,「ここで初めてPS1を設定したよ」という方は先ほどのPS1の例では問題解決後のものを紹介したので,見なくて大丈夫です.
おかしい挙動
折り返しの挙動がおかしいというのは,長いコマンドを入力していると,ある程度までプロンプトの右に表示されたら同一行の一番左に戻ってプロンプトをかき消してしまう状態です.
対策内容
ネットで調べると,エスケープシーケンスを\[\]
で囲む必要があるみたいです.
その問題が発生した時点では.bashrc
は以下のようになっていました.
GREEN="\e[1;32m"
PURPLE="\e[1;34m"
COLOR_RESET="\e[0m"
export PS1="${GREEN}\u ${PURPLE}\w ${GREEN}$ ${COLOR_RESET}"
エスケープシーケンスを\[\]
で囲んだら解決しました.
BOLD_GREEN="\[\e[1;32m\]"
BOLDPURPLE="\[\e[1;34m\]"
COLOR_RESET="\[\e[0m\]"
export PS1="${GREEN}\u ${PURPLE}\w ${GREEN}$ ${COLOR_RESET}"
おまけ
先ほど載せたものは自分で使う緑と紫しか色を設定していませんでしたが,他の色の設定したものも以下に紹介しておきます.必要ならコピーして使ってください.
BLACK="\[\e[0;30m\]"
RED="\[\e[0;31m\]"
GREEN="\[\e[0;32m\]"
YELLOW="\[\e[0;33m\]"
BLUE="\[\e[0;34m\]"
PURPLE="\[\e[0;35m\]"
CYAN="\[\e[0;36m\]"
WHITE="\[\e[0;37m\]"
BOLD_BLACK="\[\e[1;30m\]"
BOLD_RED="\[\e[1;31m\]"
BOLD_GREEN="\[\e[1;32m\]"
BOLD_YELLOW="\[\e[1;33m\]"
BOLD_BLUE="\[\e[1;34m\]"
BOLD_PURPLE="\[\e[1;35m\]"
BOLD_CYAN="\[\e[1;36m\]"
BOLD_WHITE="\[\e[1;37m\]"
UNDER_BLACK="\[\e[4;30m\]"
UNDER_RED="\[\e[4;31m\]"
UNDER_GREEN="\[\e[4;32m\]"
UNDER_YELLOW="\[\e[4;33m\]"
UNDER_BLUE="\[\e[4;34m\]"
UNDER_PURPLE="\[\e[4;35m\]"
UNDER_CYAN="\[\e[4;36m\]"
UNDER_WHITE="\[\e[4;37m\]"
BACK_BLACK="\[\e[30m\]"
BACK_RED="\[\e[31m\]"
BACK_GREEN="\[\e[32m\]"
BACK_YELLOW="\[\e[33m\]"
BACK_BLUE="\[\e[34m\]"
BACK_PURPLE="\[\e[35m\]"
BACK_CYAN="\[\e[36m\]"
BACK_WHITE="\[\e[37m\]"
COLOR_RESET="\[\e[0m\]"