bashでターミナルのタイトルを動的に変える方法

ターミナルのタイトル部に「ホスト名:カレントディレクトリ」と表示する方法。こんな感じに。

もちろん、カレントディレクトリの部分は動的に変わる。

やり方は、~/.bashrcでこんなふうにすればOK。

case $TERM in
  kterm|xterm|mlterm|cygwin|vt102)
    _termtitle="\h:\w"
    PS1="\[\e]0;${_termtitle}\007\]${PS1}"
    ;;
esac

なぜか検索するとそういう例が多いのですが、環境変数PROMPT_COMMANDで、hostnameコマンドとかpwdコマンドとか使うよか、このようにPS1で\hとか\wを使った方が効率いいと思います。(プロンプト表示するたんびにコマンドを実行するわけではないので)



エスケープシーケンスの意味は

あたりを参照すればわかると思います。



で、ウィンドウのタイトル変えて何がうれしいの?というところなんですが、そのターミナルのウィンドウがどのホストにログインしているものか視認しやすくするためです。

といっても、そういう情報は、ウィンドウのタイトルよかコマンド打つときに目線が行くプロンプトに表示するようにしておいた方が合理的です。

じゃ、どういうときに便利かというと、開いているウィンドウじゃなくて、閉じている(Iconify)しているウィンドウを視認するときのために、タイトルを変えてるんです。

もうちょっと具体的にいうとこうです。

LinuxでXでfvwm2なのがメインの作業環境なんですが、通常の作業用のターミナルだとかEmacsだとかはウィンドウマネージャを起動したときに固定位置に表示するようにしています。これで通常の作業は済むのですが、たまーにしかログインしないマシンにSSHするときは、新たにターミナルを立ち上げてログインしています。

で、用事が終わったらいつまでも画面上にいるのはウザイので、Iconifyしちゃうんですが、ちょっとしてからまた必要になったときにIconifyされているアイコンを探してマウスでちくりくクリックするのはウザイことこのうえないので、WindowListを表示してそこで選択しています。

ほんで、WindowListにはウィンドウのタイトルが表示されるので、ここでホスト名やディレクトリを表示しておけば、目的のものが特定しやすくなるという寸法です。



ちなみに、X上の操作でマウスを使うのは、Xなクライアント間でのコピペとFirefoxのリンクのクリックぐらいで、ほかのWindowListのポップアップだとかポインタの移動(もちろん、SloppyFocus)だとかバーチャルデスクトップの切り替えだとかは全部キーボードで操作できるようにしています。

あと、ターミナル(mlterm)も含めてほとんどのXなウィンドウのタイトル部は表示してません。無駄に場所くうだけで存在意義がないので。