如何在 hardstatus 中包含屏幕的会话名称?

如何在 hardstatus 中包含屏幕的会话名称?

我对不同的项目使用不同的屏幕会话。启动屏幕如下screen -S project1。现在,我想在硬状态行中提及“project1”。

会话名称可以从环境变量 STY: 中获取STY=13539.project1
但如何将其放入屏幕?我在 hardstatus 中尝试了反引号命令和 %`,但似乎无法正确执行。

我做了什么:

.screenrc:

hardstatus string '%H:%`'
backtick 0 30 30 echo $STY

没有运气,空%`。

backtick 0 30 30 sessionname

仍然没有运气,会话名称:未找到

答案1

您可以将此字符串(如果需要,还可以包含其他信息)包含在您的$PS1

\[\e]0;$STY\007

将其放在单引号内,以延迟对变量的求值。然后将其添加到您的~/.screenrc

hardstatus string '%H:%h'

不幸的是,它screen没有$STY在为该功能生成的命令的环境中设置backtick

除了上面的选项之外,还有另一种选择:

hardstatus string '%H:%`'
backtick 0 30 30 sh -c 'screen -ls | grep --color=no -o "$PPID[^[:space:]]*"'

这个方法的优点是它会跟踪使用sessionname命令所做的更改。第一个方法则不会。

编辑:

这里

由于屏幕源 .screenrc 时尚未设置 $STY,因此您可以在 .screenrc 中使用此技巧:

    screen 
    screen $SHELL -c 'screen -X caption always "$STY"' 

即向第一个窗口发送屏幕命令。

答案2

对我来说这很容易通过插入%S硬状态来实现。

MWE(.screenrc):

hardstatus on
hardstatus alwayslastline
hardstatus string "%S"

但是,这会显示会话名称没有ID(如${STY#*.});在您的示例中:project1

(其他问题的答案相同这里这里为了完整性)。

相关内容