SYSTEM238 / NOTES1 / Mac, Win, etc / Bashのコマンドプロンプトをカスタマイズする

NOTES1 PROG1
Bashのコマンドプロンプトをカスタマイズする
Bashのコマンドプロンプトを変更して複数サーバを同時進行で操作する際の間違いを減らす。

プロンプトの設定方法

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

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

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

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

[user@host ~]$ 

通常、この設定がデフォルト設定です。いろいろな環境でそのまま使えて最低限必要な情報が表示される当たり障りのない設定になっています。

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

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

設定できる変数一覧

以下の変数が設定できます。あんまり長くなるとごちゃごちゃするし視認性が悪いのでホドホドで。

それと、変数でなくサーバごとに固有値を直書きするのもアリだと思います。

\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  現在のディレクトリ名
\!  コマンドのヒストリー番号
\#  コマンドのコマンド番号(ログイン後何回実行したか)
\$  ス−パーユーザなら#、それ以外なら$を表示
\\  バックスラッシュ
\[  表示されない文字列(エスケープシーケンス/端末制御シーケンス)を埋め込む
\]  表示されない文字列の終わり

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

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

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

// \[\e[1;33m\] と \[\e[00m\] にはさまれた文字が黄色になる
[user@host ~]$ 

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

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

まとめ

私は以下のようなコマンドプロンプトにしました。

PS1=[\[\e[1;31m\]XXX\[\e[00m\]:\u \W]\$
[XXX:user www]$ 
 XXX   サーバの固有ID(色分けする)
 user  ユーザ名
 dir   カレントディレクトリ(フルパスはやめた)

ホスト名を使わず、サーバの固有IDを直接文字列で指定したのは、冒頭に述べたように「最初の'.'までのホスト名が同じサーバ」があるのと「そもそもホスト名でサーバを呼ぶ事があまりない(お客さんの名前とかシステムの名前で呼ぶ事の方が多い)」からです。