表示されないエスケープシーケンスはプロンプトに興味深い効果をもたらすために 用いられます。このようなエスケープシーケンスを用いるには、\[ と \] で囲んでやり、Bashがプロンプトの大きさを計算する時に無視させ ます。この区切りを入れてやらないと、行編集の際のカーソルの位置の計算が 違ってきます。エスケープシーケンスは、バージョン2より以前の Bash では \033[ からはじめ、それ以降のバージョンでは、\033[ でも \e[ でもはじめることができます。
コンソールを使っている時に Xterm のタイトルバーを変えようとすると、 プロンプトにごみが入ります。これを避けるには環境変数 TERM を調べて、 Xterm の時だけそのプロンプトを使うようにします。
function proml { case $TERM in xterm*) local TITLEBAR='\[\033]0;\u@\h:\w\007\]' ;; *) local TITLEBAR='' ;; esac PS1="${TITLEBAR}\ [\$(date +%H%M)]\ [\u@\h:\w]\ \$ " PS2='> ' PS4='+ ' }
これは、 /.bashrc に書いておく関数です。この関数名を呼ぶと実行されます。
関数は、PS1 文字列と同様環境に置かれます。PS1 変数がこの関数で定義され
たら、この関数をunset proml
で環境から取り除くことができます。
Xterm にいる間はコンソールに変わることがありませんから、変数TERMを
プロンプトを出す度にチェックする必要はありません。継続行のしるし
(バックスラッシュ)をプロンプトの定義の中で使っているのは、複数行に
またがるようにして、読み易さを増し、修正したり、デバッグするのを
容易にしています。
これを関数にしてあるのは、後で説明する Bashprompt パッケージのやり方です。 こうしなければならないということではありませんが、このやり方はうまく いきます。あなたの使うプロンプトが複雑になってくればくるほど、それを プロンプトのところでタイプするのは面倒になり、テキストファイルで保存 する必要が生じてきます。今回は上の関数を proml というテキストファイルに 保存しましょう。次のようにします。
[giles@nikola:/bin (4.498 Mb)]$ cd -> プロンプトを保存したいディレクトリに移動
[giles@nikola:~ (0 Mb)]$ vi proml -> プロンプトファイルを編集
... -> 上のテキストを入力
[giles@nikola:~ (0 Mb)]$ source proml -> プロンプト関数の読み込み
[giles@nikola:~ (0 Mb)]$ proml -> プロンプト関数の実行
このプロンプトを作成する第一段階は、シェルが xterm かどうかをチェックする ことです。もしxtermなら、シェル変数(${TITLEBAR})が定義されます。 その内容は適切なエスケープシーケンスと\u@\h:\wで、その結果、 <ユーザー名>@<マシン名>:<ディレクトリ>が Xterm の タイトルバーに表示されます。これは特に Xterm を最小化した時に同定しやすく してくれます。このプロンプトのそれ以外の部分はすでに今まで作ったプロンプト でおなじみのものです。
このように Xterm のタイトルバーを操作する唯一のデメリットは、このような タイトルバーになるようにセットしていない機械を使ったとき、タイトルバー が元のままになってしまうことです。