次のページ 前のページ 目次へ

4. プロンプトの表示

この特徴を生かした便利な使い方をひとつ。通常のコマンドプロンプトに表示され る情報を、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


次のページ 前のページ 目次へ