LoginSignup
9
10

More than 1 year has passed since last update.

Mac,Ubuntuのプロンプト設定[折り返しが変]

Last updated at Posted at 2019-03-13

はじめに

最近,Macbook Proを購入して色々とセッティングをしています.その過程で,terminal環境をカッコよくしようと思って,Promptを自分好みに変更しました.

本記事では,Macでのプロンプトの設定とその際に直面した”折り返しがおかしい”という問題の解決策も紹介していきます.
並行して使っているUbuntuでも同じ問題が発生し,この方法での解決を確認しました.

TL;DR

最終的には以下のようになりました.結果だけ欲しい方はそのままコピーすると良いと思います.

~/.bashrc
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を以下のように作成する必要があります.

~/.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には以下のように記述しました.(上のものと同じ)

.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は以下のようになっていました.

.bashrc(修正前)
GREEN="\e[1;32m"
PURPLE="\e[1;34m"
COLOR_RESET="\e[0m"
export PS1="${GREEN}\u ${PURPLE}\w ${GREEN}$ ${COLOR_RESET}"

エスケープシーケンスを\[\]で囲んだら解決しました.

.bashrc(修正後,先ほどのものと同じ)
BOLD_GREEN="\[\e[1;32m\]"
BOLDPURPLE="\[\e[1;34m\]"
COLOR_RESET="\[\e[0m\]"
export PS1="${GREEN}\u ${PURPLE}\w ${GREEN}$ ${COLOR_RESET}"

おまけ

先ほど載せたものは自分で使う緑と紫しか色を設定していませんでしたが,他の色の設定したものも以下に紹介しておきます.必要ならコピーして使ってください.

PromptColorPreference
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\]"
9
10
4

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
9
10