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


17

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

会话名称可以从环境变量STY:获得STY=13539.project1
但是如何让它进入屏幕呢?我已经在hardstatus中尝试过反引号命令和%`,但似乎无法正确执行。

我做了什么:

.screenrc:

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

没有运气,空%`。

backtick 0 30 30 sessionname

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

Answers:


18

您可以在以下内容中包含此字符串(如有需要,可提供其他信息)$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"' 

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


1
对于以backtick:开头的解决方案(1.)是否backtick内置了bash?一个gnu-screen命令?二进制可执行文件?有手册页吗?(2.)我知道它是有效的,因为我尝试了它,但是当看起来像gnu-screen .screenrc语法要求该hardstatus命令一行时,如何执行两行命令呢?(3.)我将如何修改您的命令以允许在会话名称后附加一些文本?
Trevor Boyd Smith

@TrevorBoydSmith:backtick是一个screen命令。在手册页中搜索screen。最好是,如果您发布一个关于其余问题的新问题。我认为hardstatus输出不会占用屏幕上的两行。你可以使用sedawk代替grep做什么grep的在我的例子做,也附加了一些额外的文本。
暂停,直到另行通知。

当我说“两行”时,我要重申我的意思,我不希望硬状态显示两行。我对%` backtick放在不同的行感到困惑...它们看起来并不相关,但是现在我阅读了文档,因为backtick我看到两者是相关的/必需的/有效的语法(尽管语法很奇怪IMO)。
Trevor Boyd Smith

3

对我来说,这很容易插入%Shardstatus。

MWE(.screenrc):

hardstatus on
hardstatus alwayslastline
hardstatus string "%S"

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

(为了完整性,这里这里对其他问题的回答都是相同的)。


2
仅供参考,“%S”确实适用于较新版本的gnu-screen(对我而言适用于Fedora 21版本),但不适用于较旧版本(对我而言不适用于CentOS 6版本)。
Trevor Boyd Smith
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.