Bashのコマンドプロンプトをカスタマイズする

Bashのコマンドプロンプトを工夫して作業中のサーバを間違えないようにする。

1. プロンプトの設定方法

ホームディレクトリにある「.bashrc」に、下記の行を付け加えます。


export PS1='[\u@\h \w]\$ '

 \u  ユーザ名
 \h  ホスト名
 \w  カレントディレクトリ(フルパス)
 \$  ス−パーユーザなら#、それ以外なら$を表示

この設定で、以下のようなコマンドプロンプトが表示されます。


[user@host ~]$ cd hoge
[user@host ~/hoge]$ cd /var/www/html
[user@host /var/www/html]$

だいたいデフォルト設定がこんな感じでしょうか。いろいろな環境でそのまま使えて最低限必要な情報が表示される当たり障りのない設定になっています。

しかし、複数のサーバで同時作業をしているときなんかは、このプロンプトだとサーバの判別がつきにくいことがあります。特に「ホスト名とユーザ名が同じ複数サーバで同時に作業」をしているときなんかは最悪です。

このノートでは、そんな環境での間違いを減らすコマンドプロンプトを考えます。

2. 設定できる変数一覧

以下の変数が設定できます。あんまり長くなるとごちゃごちゃするし視認性が悪いのでホドホドで。それと、変数でなくサーバごとに固有値を直書きするのもアリだと思います。


\a  ベル(ビープ音)をならします(ASCII のベル文字 07)
\d  日付
\h  最初の'.'までのホスト名
\H  ホスト名
\n  改行
\r  復帰
\s  シェル名(標準だと -bash が表示)
\t  時刻 HH:MM:SS 形式(24時間) H = Hour = 時、M = Minutes = 分、S = Seconds = 秒
\T  時刻 HH:MM:SS 形式(12時間)
\@  時刻 am/pm をつけたもの。Lang=Jaの場合 HH:MM (午前|午後)となる。
\u  現在のユーザー名
\v  bash のバージョン
\V  bash のバージョン・リリース番号など詳細
\w  現在のディレクトリ(フルパス)
\W  現在のディレクトリ名
\!  コマンドのヒストリー番号
\#  コマンドのコマンド番号(ログイン後何回実行したか)
\$	ス−パーユーザなら#、それ以外なら$を表示
\\  バックスラッシュ
\[  表示されない文字列(エスケープシーケンス/端末制御シーケンス)を埋め込む
\]  表示されない文字列の終わり

3. 変数だけじゃなく色もつけられる

文字だけだとどうしても埋もれてしまうので色分けします。実行結果と入力行の判別も付きやすくなります。


export PS1='[\u@\[\e[1;31m\]\h\[\e[00m\] \w]\$ '

 \[\e[1;31m\] と \[\e[00m\] にはさまれた文字が赤色になる


[user@host ~]$

「1;31」の部分を変更すると他の色にできます。


0;30  Black
0;34  Blue
0;32  Green
0;36  Cyan
0;31  Red
0;35  Purple
0;37  Light Gray
1;30  Dark Gray
1;34  Light Blue
1;32  Light Green
1;36  Light Cyan
1;31  Light Red
1;35  Light Purple
1;33  Yellow
1;37  White

4. 結論(ぼくのかんがえたさいきょうプロンプト)


PS1=[\[\e[1;31m\]XXX\[\e[00m\]:\u \W]\$


[XXX:user dir]$ 

 XXX   サーバの固有ID(色分けする)
 user  ユーザ名
 dir   カレントディレクトリ(フルパスはやめた)

ホスト名を使わずサーバ固有IDを文字列で指定したのは、冒頭に述べたように同じホスト名があるのと「そもそもホスト名でサーバを呼ぶ事があまりなく、お客さんの名前とかシステムの名前で呼ぶ事の方が多い」からです。
「鈴木建設のDBサーバ」とか「顧客管理システムのwebサーバ」とかです。

例)鈴木建設のDBサーバと斉藤商事のDBサーバだとこんな感じです。


[SUZU-DB:postgres ~]$ pwd
/var/hoge
[SUZU-DB:postgres ~]


[SAIT-DB:postgres ~]$ cd /hoge/fuga
[SAIT-DB:postgres fuga]$

おまけ(報告書用プロンプト)

報告書に作業ログつけるとかで日時やディレクトリが重要になる時は一時的にコマンドプロンプトを変更してます。
こんな感じ。


export PS1='[\u@\H \d \t\w]\$ '
 \h -> \H  ホスト名を省略形からフルに
 \d        日付追加
 \t        時刻追加
 \W -> \w  フルパスに


[SUZU-DB:postgres ~]$ export PS1='[\u@\H \d \t \w]\$ '
[postgres@db.suzu-ken.co.jp 木 03月 20 09:32:07 ~]$ cd /hoge/fuga
[postgres@db.suzu-ken.co.jp 木 03月 20 09:32:07 /hoge/fuga]$ ls -l
合計 156
drwx------. 4 postgres postgres   4096 ...
    :
    :
-rw-r--r--  1 postgres postgres   3293 ...
[postgres@db.suzu-ken.co.jp 木 11月 23 09:34:42 /hoge/fuga]$