带有 GNU screen 的 PuTTY 下的 PS1 窗口标题

带有 GNU screen 的 PuTTY 下的 PS1 窗口标题

我目前通过在我的 .bashrc 中连接三个变量来设置我的 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)

我很想看看会议-1或者会议-2出现在我的PuTTY窗口标题中,但我找不到正确的.screenrc配置硬弦可以正常工作。我还找不到将“/var/run/screen/S-user”的内容正确映射到当前会话的方法。我尝试使用 ${PPID},但如果在子 shell 中,它会失败。

摘自我当前的.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"

有什么方法可以得到我想要的东西吗?

答案1

如果您希望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 会话已准备好执行屏幕。

在屏幕会话内。注意 PuTTY 窗口标题。 在屏幕会话内。标题是屏幕会话名称。

Screen 会话已结束。标题已重置。 Screen 会话已结束。标题为 Putty。

相关内容