如何在硬状态中包含屏幕的会话名称?

fun*_*gus 19 gnu-screen

我为不同的项目使用不同的屏幕会话。启动画面如screen -S project1。现在,我想在 hardstatus 行中提及“project1”。

会话名称可以从环境变量 STY: 中获得STY=13539.project1
但是如何把它放到屏幕上呢?我在 hardstatus 中尝试过反引号命令和 %`,但我似乎无法正确使用。

我做了什么:

.screenrc:

hardstatus string '%H:%`'
backtick 0 30 30 echo $STY
Run Code Online (Sandbox Code Playgroud)

没有运气,空 %`。

backtick 0 30 30 sessionname
Run Code Online (Sandbox Code Playgroud)

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

Den*_*son 18

您可以在您的$PS1:

\[\e]0;$STY\007
Run Code Online (Sandbox Code Playgroud)

在单引号内以延迟变量的评估。然后将此添加到您的~/.screenrc

hardstatus string '%H:%h'
Run Code Online (Sandbox Code Playgroud)

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

另一种选择,而不是上面的那个:

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

这个的优点是它遵循使用sessionname命令所做的更改。第一个选项没有。

编辑:

这里

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

    screen 
    screen $SHELL -c 'screen -X caption always "$STY"' 
Run Code Online (Sandbox Code Playgroud)

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


Scz*_*Scz 6

对我来说,这很容易与插入%Shardstatus 一起使用。

MWE (.screenrc):

hardstatus on
hardstatus alwayslastline
hardstatus string "%S"
Run Code Online (Sandbox Code Playgroud)

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

(为完整性起见,此处此处对其他问题的回答相同)。

  • 仅供参考,“%S”确实适用于较新版本的 gnu-screen(适用于我的 Fedora 21 版本)但不适用于旧版本(不适用于我的 CentOS 6 版本)。 (2认同)