この特徴を生かした便利な使い方をひとつ。通常のコマンドプロンプトに表示され
る情報を、xterm
のタイトルに移動させる方法があります。以下のように変数
を定義すると
export PS1='\u@\h:\w> '
この結果、次のように表示されます。
winni@FeilSurf:~/mail>
もしディレクトリを"/afs/rrz.uni-koeln.de/pub/packages/linux
/kernel/v2.0
"に変更したらどうなるでしょうか?プロンプトは長くなり
コマンドの入力をする場所が狭くなってしまいます。
winni@FeilSurf:/afs/rrz.uni-koeln.de/pub/packages/linux/kernel/v2.0>
これは繁雑です。しかしタイトルバーにこの情報を置いてしまえば全て解決し
ます。
export PS1='\033]2; \u@\h:\w \007bash> '
上記コマンドで必要なエスケープシーケンスをエコーし、プロンプト
bash> _
のみ表示させます。
残念なことにPS1
の最大の長さは60文字程度という制限があるので
全ての場合でこれがうまくいくわけではありません。他のアイディアは
"cd"といったシェル内蔵のものをecho
エスケープシーケンス
に再定義するこですが、これだとシェルスクリプトを実行した時タイトルバーの
その他の影響が生じてしまいやっかいです(どの"cd"でもタイトル
を変更してしまいます)。
もっとも確かなアプローチは環境変数"PROMPT_COMMAND
"を使うこと
のようです。この変数の中身はプログラムが終了した後とbash
プロンプト
が再び表示される前に実行されるというものです。以下のようにすれば
ネットワーク環境でxterm
をたくさん開く時など便利です。
export PROMPT_COMMAND='echo -ne "\033]2;$LOGNAME@$HOST Directory: \ $PWD\007\033]1;$LOGNAME@$HOST\007"特にウィンドウマネージャーのウィンドウリストを見る時など便利でしょう。 さらにこれらを以下のようなスクリプトに書いておけば完璧です。xtermを使って いる時にこの環境変数をセットするだけです。
if [ "$TERM" = "xterm" -o "$TERM" = "xterm-color" -o \ "$TERM" = "rxvt" -o "$TERM" = "vs100" ] then PS1='bash> ' PS2='bash>> ' PS3='bash>>> ' export PROMPT_COMMAND='echo -ne "\033]2;$LOGNAME@$HOST \ Directory: $PWD\007\033]1;$LOGNAME@$HOST\007"' fi
プロンプト"bash>"は、多くのプログラム(gnuplot,ncftp, gap, kash, ...)がプログラム名をはじめに置いているので、同じように統一しました。 しかしこれでも"ytalk"のようなサブシェルを起動するプログラム では乱れてしまうという障害があります。もしこれに出くわしたら
unset PROMPT_COMMAND
として下さい。
Happy Linuxing
-Winfried Trumper winni@xpilot.org