【问题标题】:How do I display the current "session" name or "sockname" of a screen session in the status bar?如何在状态栏中显示屏幕会话的当前“会话”名称或“sockname”?
【发布时间】:2010-03-19 18:27:18
【问题描述】:

我运行多个屏幕会话,每个会话都是使用“screen -S name”创建的,我希望能够在状态栏中显示 name我用来创建当前屏幕会话。

但是,我似乎无法做到这一点。有什么想法吗?

【问题讨论】:

标签: gnu-screen


【解决方案1】:

显示会话名称的最简单方法是

  C-a : 
  sessionname

(在sessionname之后不指定名称)

请参阅man screen 中的“自定义”部分

【讨论】:

  • 你能澄清一下吗?这是一个独立的命令还是参数?
  • 依次键入以下三个击键/命令:Ctrl-A 然后: 然后sessionname (Ctrl-A 应该替换为您为屏幕控制击键设置的任何内容,如果您已将其从默认的 Ctrl-A 更改。)然后您将看到类似于以下内容的输出:This session is named '31438.Perlrocks'
  • 整洁!有没有办法在screen 内运行的脚本中得到这个?
【解决方案2】:

screen 有两个状态栏,标题栏和硬状态栏,它们都使用man screen 的“字符串转义”部分中指定的字符串转义。不幸的是,没有直接引用会话名称的转义。

但是,有一个 hack 可以让您执行此操作。

screen 使用 $STY 变量将会话名称传递给 shell。当 shell 尝试设置窗口标题(使用one of these methods)时,screen 会捕获该尝试,并将其存储在它令人困惑地称为“窗口硬状态”的东西中,它确实有一个可以使用的转义:%h

因此,如果您将标题栏或 hardstatus 栏设置为包含 %h,并让 shell 尝试将窗口标题设置为 $STY,那么当栏为显示出来。

【讨论】:

  • 非常接近...非常适合初始会话但是,一旦我在屏幕会话中,如果我 ssh 到另一个主机 STY 将不再设置。有没有办法保留这些信息,或者让屏幕在会话开始时只读取一次值?
  • @Neg_EV:嗯,根据man ssh的ENVIRONMENT部分,如果远程主机的sshd允许(默认不允许),你可以在里面设置环境变量(比如STY)你的本地 .ssh/environment 文件(所以在你的本地 .bashrc,只是 cat STY=$STY > .ssh/environment),当你 ssh 到将设置适当环境变量的远程机器时。
  • @Neg_EV:如果您不想(或不能)更改遥控器的 sshd 设置,那么您可以让本地 .bashrc 将 STY 值转储到文件中,别名ssh 以首先将该文件 scp 到远程主机,如果未设置 STY,则让您的远程 .bashrc 获取该文件(这样可以远程和本地使用相同的 .bashrc)。
  • 我在我的 .bash_profile 中添加了 alias screen='screen -s -/bin/bash'export PS1='$STY> ',所以使用 alias,屏幕在每个会话中执行我的 .bash_profile 并使用 export 我可以看到我正在处理哪个会话。
【解决方案3】:

在当前版本的screen 中,hardstatus 行有一个标志%S

MWE (.screenrc):

hardstatus on
hardstatus alwayslastline
hardstatus string "%S"

这将显示会话名称​​没有 ID(如${STY#*.})。

(为了完整起见,其他问题的答案相同 herehere)。

【讨论】:

    【解决方案4】:

    转述自 https://superuser.com/a/212520/151988,将其放入 ~/.screenrc;

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

    【讨论】:

      【解决方案5】:

      超级用户对此有一个不需要$STY 的答案,而是使用backtick 屏幕配置命令和screen -lshttps://superuser.com/a/212520

      【讨论】:

        【解决方案6】:

        如果没有其他方法(对我而言),作为一种解决方法,您可以创建一个编号为 0 的窗口并将标题设置为您的屏幕名称:

        screen -S myscreen
        C^a :title "myscreen"
        

        【讨论】:

          【解决方案7】:

          正如 max_cantor 在SuperUser Answer 中所说,会话名称的转义字符应添加到版本 4.1.0。 It looks like 转义字符功能是在 2008 年通过一个相对较小的补丁添加的。所以如果你有勇气,你可以自己 git 一份开发版本 4.1.0 并尝试一下。

          有机会我会用开发版试试这个。

          【讨论】:

            【解决方案8】:

            “屏幕 -X 会话名称” 我正在使用 ssh,我认为这是一个直接的答案, sessionname 将显示在屏幕底部

            【讨论】:

            • 正如目前所写,您的答案尚不清楚。请edit 添加其他详细信息,以帮助其他人了解这如何解决所提出的问题。你可以找到更多关于如何写好答案的信息in the help center
            猜你喜欢
            • 2015-07-24
            • 1970-01-01
            • 2014-12-03
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2012-11-25
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多