【发布时间】:2010-03-19 18:27:18
【问题描述】:
我运行多个屏幕会话,每个会话都是使用“screen -S name”创建的,我希望能够在状态栏中显示 name我用来创建当前屏幕会话。
但是,我似乎无法做到这一点。有什么想法吗?
【问题讨论】:
标签: gnu-screen
我运行多个屏幕会话,每个会话都是使用“screen -S name”创建的,我希望能够在状态栏中显示 name我用来创建当前屏幕会话。
但是,我似乎无法做到这一点。有什么想法吗?
【问题讨论】:
标签: gnu-screen
【讨论】:
Ctrl-A 然后: 然后sessionname (Ctrl-A 应该替换为您为屏幕控制击键设置的任何内容,如果您已将其从默认的 Ctrl-A 更改。)然后您将看到类似于以下内容的输出:This session is named '31438.Perlrocks'。
screen 内运行的脚本中得到这个?
screen 有两个状态栏,标题栏和硬状态栏,它们都使用man screen 的“字符串转义”部分中指定的字符串转义。不幸的是,没有直接引用会话名称的转义。
但是,有一个 hack 可以让您执行此操作。
screen 使用 $STY 变量将会话名称传递给 shell。当 shell 尝试设置窗口标题(使用one of these methods)时,screen 会捕获该尝试,并将其存储在它令人困惑地称为“窗口硬状态”的东西中,它确实有一个可以使用的转义:%h。
因此,如果您将标题栏或 hardstatus 栏设置为包含 %h,并让 shell 尝试将窗口标题设置为 $STY,那么当栏为显示出来。
【讨论】:
man ssh的ENVIRONMENT部分,如果远程主机的sshd允许(默认不允许),你可以在里面设置环境变量(比如STY)你的本地 .ssh/environment 文件(所以在你的本地 .bashrc,只是 cat STY=$STY > .ssh/environment),当你 ssh 到将设置适当环境变量的远程机器时。
sshd 设置,那么您可以让本地 .bashrc 将 STY 值转储到文件中,别名ssh 以首先将该文件 scp 到远程主机,如果未设置 STY,则让您的远程 .bashrc 获取该文件(这样可以远程和本地使用相同的 .bashrc)。
alias screen='screen -s -/bin/bash' 和 export PS1='$STY> ',所以使用 alias,屏幕在每个会话中执行我的 .bash_profile 并使用 export 我可以看到我正在处理哪个会话。
转述自 https://superuser.com/a/212520/151988,将其放入 ~/.screenrc;
screen
screen $SHELL -c 'screen -X caption always "$STY"'
【讨论】:
超级用户对此有一个不需要$STY 的答案,而是使用backtick 屏幕配置命令和screen -ls:https://superuser.com/a/212520
【讨论】:
如果没有其他方法(对我而言),作为一种解决方法,您可以创建一个编号为 0 的窗口并将标题设置为您的屏幕名称:
screen -S myscreen
C^a :title "myscreen"
【讨论】:
正如 max_cantor 在SuperUser Answer 中所说,会话名称的转义字符应添加到版本 4.1.0。 It looks like 转义字符功能是在 2008 年通过一个相对较小的补丁添加的。所以如果你有勇气,你可以自己 git 一份开发版本 4.1.0 并尝试一下。
有机会我会用开发版试试这个。
【讨论】:
“屏幕 -X 会话名称” 我正在使用 ssh,我认为这是一个直接的答案, sessionname 将显示在屏幕底部
【讨论】: