#046
posted on 2021.06.13 (Sun) 2022.09.22 (Thu)

bashを使っているターミナルのプロンプトの表示内容と色を変更。

初期状態では「ホスト名:カレントディレクトリ ユーザー名$」で表示されるmacOSのターミナルのプロンプトが見づらいので、プロンプトの表示内容と色を変更する方法のメモ。(ログインシェルにbashを使っている場合。)

 

プロンプト表示の設定が格納されているシェル変数「PS1」の設定値を変更する。

(現在の変数の値はコマンド「echo $変数名」で確認できる。)

 

macOS High Sierra バージョン 10.13.6
ターミナル バージョン2.8.3 (404.1)
GNU bash, version 3.2.57 で確認。

 

  1. ホームディレクトリにbashの設定ファイル「.bash_profile」と「.bashrc」を作成。
  2. 「.bash_profile」に「.bashrc」を読み込むシェルスクリプトを記述。
  3. 「.bashrc」に、プロンプト表示設定の値を変数「PS1」に代入して環境変数に書き出すシェルスクリプトを記述。
  4. ターミナルを再起動してプロンプト表示を確認。

 

 

「.bash_profile」と「.bashrc」を作成

bashの初期設定用のファイル「.bash_profile」と「.bashrc」をホームディレクトリに作成する。(macOSのデフォルト設定では2つとも存在しない。)

ホームディレクトリに「.bash_profile」ファイルと「.bashrc」ファイルが存在すると、シェル起動時に自動的に読み込まれ、記述されているシェルスクリプトが実行される。

  • 「.bash_profile」は、ログインシェル起動時にだけ読み込まれる設定ファイル。
  • 「.bashrc」は、ログインシェル以外でシェル起動時に読み込まれる設定ファイル。

※ 「.bash_profile」に「.bashrc」を読み込むように記述して、ログイン時にも「.bashrc」を実行するのが一般的なようなので準拠。

 

(1) 「.bash_profile」と「.bashrc」がホームディレクトリに存在するかを確認。

ls -al ~ | grep .bash

ls : list segmentsの略。指定したディレクトリ内にあるディレクトリとファイルの一覧を表示するコマンド。オプション「-a」は隠しファイルを含めたすべてのディレクトリとファイルを表示、オプション「-l」は各ディレクトリとファイルについての詳細情報を表示。

| : パイプ。コマンドの標準出力を別のコマンドの標準入力として繋げる。

grep : テキストファイルから指定した文字列を含む行を検索して、一致した文字列を含んでいる行を表示するコマンド。検索文字列には正規表現も使える。

 

(2) 「.bash_profile」と「.bashrc」が無い場合はホームディレクトリにそれぞれ作成。

ターミナル上で作成する場合は「touch」コマンドを使う。(Finderでファイルを新規作成しても同じ。)

touch ~/.bash_profile
touch ~/.bashrc

touch : 指定したディレクトリやファイルのタイムスタンプを変更するコマンド。指定したファイルが存在しない場合はファイルを新規作成する。

 

 

「.bash_profile」と「.bashrc」に設定を記述

「.bash_profile」と「.bashrc」それぞれに設定の記述をする。

  • 「.bash_profile」に「.bashrc」を読み込む設定を記述。
  • 「.bashrc」にプロンプト表示に使う変数の設定を記述。

ファイルの中身は、ターミナル上でCUIエディターのVimなどを起動して編集するか、外部のGUIエディターで直接編集する。

※ ファイルのフォーマットがunix以外になっていると、「syntax error unexpected end of file」という読み込みエラーが出たので注意。(おそらく改行コードが「LF」以外になることが原因。UnixとmacOS X以降では「LF」、旧macOSでは「CR」が改行コードに使用される。)

 

1. 「.bash_profile」の記述

「.bashrc」ファイルが存在すれば読み込むように記述。

if [ -f ~/.bashrc ] ; then
  . ~/.bashrc
fi

if [ 条件式 ]; then 処理; fi : シェルスクリプトのif文。改行しない場合はセミコロン「;」を使う。条件式と「[」、「]」の間には半角スペースが必要。オプション「-f」は、指定したファイルパスが通常のファイルならば真。(「[ ]」は、「test」コマンドの略式。)

. : ドットコマンド。「source」コマンドと同じ。指定したファイルを現在のシェル上で実行する。(指定したファイル内のシェルスクリプトで実行された変数が現在のシェルにも引き継がれる。)

 

 

2. 「.bashrc」の記述

シェル変数「PS1」の値を定義して、「export」コマンドで環境変数として書き出すように記述。

(「PS1」の初期設定の値は、「\h:\W \u\$ 」。)

 

プロンプトを任意の表示にする記述の例

「コマンドの実行番号 [時間] カレントディレクトリ $ 」でプロンプトを表示させる場合の記述。

PS1="\# [\t] \W \$ " #シェル変数を定義
export PS1 #シェル変数を環境変数に設定

export : シェル変数を環境変数として設定するコマンド。オプション「-n」で環境変数を削除(シェル変数は残る)、オプション「-p」で環境変数の一覧表示。

 

「PS1」に設定できる主な値

文字列 出力される内容
\h ドット「.」前までのホスト名
\H 完全表記のホスト名
\u ユーザー名
\w フルパスのカレントディレクトリ
\W カレントディレクトリ
\t 24時間表記の時間(HH:MM:SS)
\T 12時間表記の時間(HH:MM:SS)
\A 秒無しの24時間表記の時間(HH:MM)
\@ AM/PM表記の時間 (HH:MM AM/PM)
\d 日付(曜日 月 日)
\# ログイン後からのコマンド実行番号
\! 履歴でのコマンド実行番号
\$ root権限なら「#」、それ以外のユーザーなら「$」
\n 改行
\[ エスケープシーケンス開始(端末制御シーケンスをプロンプトに埋め込む。)
\] エスケープシーケンス終了(終了は省略できるが、省略すると環境によってはバグが発生する。)

※ ホスト名は、GUIの「リンゴマーク」 > 「システム環境設定」 > 「共有」 > 「編集」から「ローカルホスト名」で変更できる。

 

 

3. プロンプト表示の文字の装飾

シェル変数を定義するときに、エスケープシーケンスを利用して文字の装飾を指定する。

  • ASCII制御コードを拡張するためのエスケープシーケンス(ANSIエスケープコード)を利用して、プロンプト表示の文字色・背景色の変更、文字のスタイル装飾ができる。
  • 画面出力をコントロールするCSI(Control Sequence Introducer)シーケンスのテキスト属性を設定するSGR(Select Graphics Rendition)のパラーメーターを指定して装飾する。

※ エスケープシーケンスの「\[」と「\]」で囲んだ部分は、bashがプロンプトの大きさの計算を無視する。

※ CSIシーケンスの開始文字列には「\e[」などもあるようだが、バージョンやシェルによって実装が異なるようなので「\033[」を使用。(ASCII制御文字「ESC」のコードは、10進数で「27」、8進数で「033」、16進数で「0x1b」。)

 

文字装飾の記述方法

装飾を指定したあとにデフォルトの値(デフォルト文字色「39」、デフォルト背景色「49」、すべてクリア「0」)でリセットしなければ、プロンプト以降の出力文字にも継続して装飾が反映されるので注意。

  1. 「\[」でエスケープシーケンスを開始。
  2. 「\033[」でCSIシーケンスを開始。
  3. 「引数」(装飾のコード値)と「m」(終了文字)を記述。(SGRパラメーターの指定。)
  4. 「\]」でエスケープシーケンスを終了。
  5. これ以降の出力文字列に指定した装飾が適用される。

(例) 文字色に黒「30」、背景色に赤「41」を指定する「\[\033[30;41m\]」を記述すると、それ以降の出力は黒文字赤背景になる。

※ 引数が複数の場合はセミコロン「;」で区切る。

※ 装飾設定をすべてクリアする「0m」のときは数字を省略して「m」と記述できる。

 

文字色を指定してプロンプトを任意の表示にする記述の例

「コマンドの実行番号」を赤文字、「[時間] カレントディレクトリ $」を黄文字にして、以降の装飾はデフォルトに戻す場合の記述。

PS1="\[\033[31m\]\# \[\033[33m\][\t] \W \$ \[\033[m\]"
export PS1

 

プロンプト表示で設定できる色

実際の色見本(Wikipedia)。

コード

30(文字), 40(背景)

31(文字), 41(背景)
32(文字), 42(背景)
33(文字), 43(背景)
34(文字), 44(背景)
35(文字), 45(背景)
36(文字), 46(背景)
37(文字), 47(背景)
38;5;色コード(文字), 48;5;色コード(背景) 256色で色コード(0~255)を指定(対応環境の場合のみ)
39(文字), 49(背景) デフォルトの色に戻す

※ 文字色は90~97、背景色は100~107で指定すると明度の強い色も選択できる。

※ GUIでターミナルのメニューから「環境設定」 > 「プロファイル」 > 「テキスト」 > 「ANSIカラー」の項目で、それぞれのコード値に対応する色の設定をカラーピッカーで好きな色に変更できる。

 

 

この記事のURL

https://memo.ag2works.tokyo/post-1923/

Copyコピー
この記事のタイトル

bashを使っているターミナルのプロンプトの表示内容と色を変更。 | memo メモ [AG2WORKS]

Copyコピー
この記事のリンクタグ

<a href="https://memo.ag2works.tokyo/post-1923/" target="_blank" rel="noopener">bashを使っているターミナルのプロンプトの表示内容と色を変更。 | memo メモ [AG2WORKS]</a>

Copyコピー
※ フィールドをクリックでコピーするテキストの編集ができます。

この記事へのコメント

コメントの書き込みはまだありません。

  • コメント内のタグはエスケープ処理され、文字列として出力されます。
  • セキュリティーのため、投稿者のIPアドレスは取得されます。
  • 管理者が内容を不適切と判断したコメントは削除されます。
  • このフォームにはスパム対策として、Googleの提供するreCAPTCHAシステムが導入されています。
    (Google Privacy Policy and Terms of Service.)