web-dev-qa-db-ja.com

GNU画面のPuTTYの下のPS1ウィンドウタイトル

現在、.bashrcの3つの変数を次のように連結して、PS1のタイトルを設定しています。

export TERMSERVER=`who am i | awk '{print $NF}' | tr -d ')''('`
if [ -n "$TERMSERVER" ] ; then
  PS1_TITLE='\h ($MACHTYPE) - $Shell[$SHLVL] <-- $TERMSERVER'
else
  PS1_TITLE='\h ($MACHTYPE) - $Shell[$SHLVL]'
fi
export PS1="$PS1_TITLE\n$PS1_LINE\n$PS1_Prompt"

また、いくつかのPuTTYを開いて、各PuTTYで異なるGNU画面を起動し、それぞれにセッション名を付けます。例:

screen -T screen -U -S session-1 (in PuTTY #1)
screen -T screen -U -S session-2 (in PuTTY #1)

PuTTYウィンドウのタイトルにsession-1またはsession-2が表示されるのを確認したいのですが、の正しい.screenrc構成が見つかりません。 hardstring動作しています。また、「/ var/run/screen/S-user」の内容を現在のセッションに正しくマップする方法が見つかりません。 $ {PPID}を使用してみましたが、サブシェルの場合は失敗します。

私の現在の.screenrcからの抜粋:

# Every x seconds, requery window title                     
backtick 1 600 600 id -un                                   

# The window's title                                        
hardstatus ignore        
# *** this is the current window title I use since I can't get what I want.
hardstatus string "%1`@%H"                               

caption always                                              
caption string "%{= KW}%-w%{= wk}%50>%n %t%{-}%+w%< %=%H %l"

欲しいものを手に入れる方法はありますか?

4
BlakBat

screenがPuTTYウィンドウのタイトルにセッション名を出力するようにしたい場合は、この関数を.bashrcに追加します。

screen ()
{
    sessionname=$(echo $@ | fgrep -- '-S ' | sed 's/.*-S \([^ ]\+\).*/\1/');
    echo -ne "\033]0;${sessionname:-PuTTY}\007";
    command screen $@;
    echo -ne "\033]0;PuTTY\007"
}

通常どおり画面を実行します。

この関数は、-Sというオプションをチェックし、セッション名を抽出して、ターミナルエスケープシーケンスで設定し(または、セッション名が空の場合はPuTTYを設定し)、screenバイナリを実行します。 screenバイナリが終了すると、PuTTYウィンドウのタイトルがPuTTYにリセットされます。

見ることは信じているので:-):

これは、画面を実行する準備ができているPuTTYセッションです。 PuTTY session ready to execute screen.

スクリーンセッション内。 PuTTYウィンドウのタイトルに注目してください。 Inside a screen session. Title is screen session name.

スクリーンセッションが終了しました。タイトルがリセットされます。 Screen session ended. Title is PuTTY.

2
jaume