プロンプトPS1の設定

今日なんとなく変更しました。以前からいまひとつピンと来なかったことがいま検索したら載ってたので、メモしておきます。

PS1の内容

\a ASCII のベル文字 (07)
\d "曜日 月 日" という形式の日付 (例: "Tue May 26")
\D{format} format が strftime(3) に渡され、 その結果がプロンプト文字列に挿入されます。 format が空の場合には (ブレースは必要)、 ロケールで指定された時刻表記になります。
\e ASCII のエスケープ文字 (033)
\h ホスト名のうち最初の `.' までの部分
\H ホスト名
\j シェルによって現在管理されているジョブの数
\l シェルの端末デバイスのベース名 (basename)
\n 改行 (newline)
\r 復帰 (carriage return)
\s シェルの名前。つまり $0 のベース名 (最後のスラッシュ以降の部分)
\t 24 時間制の HH:MM:SS 形式の現在の時刻
\T 12 時間制の HH:MM:SS 形式の現在の時刻
\@ 12 時間制の am/pm 形式の現在の時刻
\A 12 時間制の HH:MM 形式の現在の時刻
\u 現在のユーザのユーザ名
\v bash のバージョン (例: 2.00)
\V bash のリリース。バージョンにパッチレベルを加えたもの (例 : 2.00.0)
\w 現在の作業ディレクトリ。 $HOME の部分はチルダに短縮されます。 PROMPT_DIRTRIM の値が適用されます。
\W 現在の作業ディレクトリのベース名 $HOME の部分はチルダに短縮されます。
\! このコマンドの履歴番号
\# このコマンドのコマンド番号
\$ 実効 UID が 0 の場合に #、 それ以外の場合は $
\nnn 8進数 nnn に対応する文字
\\ バックスラッシュ
\[ 非表示文字のシーケンスの開始。 これを使うと、プロンプト中に端末の制御シーケンスを埋め込むことができます。
\] 非表示文字のシーケンスを終了します。
Man page of BASH

上記プロンプトに倣うように書き換えておきます。

Set Display Attributes

Set Attribute Mode [{attr1};...;{attrn}m Sets multiple display attribute settings. The following lists standard attributes: \[0m Reset all attributes(リセット) \[1m Bright(強調:太字) \[2m Dim(弱め:色つけ無し?) \[4m Underscore(下線) \[5m Blink(点滅) \[7m Reverse(反転) \[8m Hidden(非表示) Foreground Colours(文字色) \[30m Black \[31m Red \[32m Green \[33m Yellow \[34m Blue \[35m Magenta \[36m Cyan \[37m White Background Colours(背景色) \[40m Black \[41m Red \[42m Green \[43m Yellow \[44m Blue \[45m Magenta \[46m Cyan \[47m White ANSI/VT100 Terminal Control
色指定は当然ながら3項目あるので3つ指定できます。 例えば白地に赤太字で「Red」と表示したい場合は
\[1;31;47mRed\]
と書きます。

おまけ

Mac OS Xのechoではecho -eにしても\eをエスケープと認識してくれず、いちいち\033と書く必要がありました。 ので上記の「白地に赤太字で「Red」と表示」するには
echo -e "\033[1;31;47mRed\033]"
と書きます。 参考:macos - Why doesn't echo support "\e" (escape) when using the -e argument in MacOSX - Super User