【bash】コマンドプロンプトの表示を変更する方法

bashコマンドプロンプトは標準では、

 [test1@localhost ~]$ 

のように表示されます。
この表示は環境変数PS1を書き換えることで変更することができます。


例えば、プロンプトを">>"とするには次を実行します。

  [test1@localhost ~]$ PS1=">>" (Enter)
  >>  ← プロンプトが">>"になっている


PS1には設定可能は以下の特種文字が設定可能です。(出展:Man page of BASH)

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


特種文字を利用して様々なコマンドプロンプトが実現できます。

例1 現在時刻を表示する

 [test1@localhost ~]$ PS1="(\t)[\u@\h \W]$ " (Enter)
 (16:24:49)[test1@localhost ~]$ ← 先頭に現在時刻が表示される

例2 コマンド番号を表示する

 [test1@localhost ~]$ PS1="(\#)[\u@\h \W]$ " (Enter)
 (45)[test1@localhost ~]$ ← 先頭にこのシェル上でのコマンド番号が表示される